容器間通過宿主機ip間接通訊
nginx容器和php-fpm容器通訊
問題焦點
容器如何獲取宿主機docker0網絡卡ip?
通過容器/etc/profile(hosts)檔案
下面2條命令是等效的
--add-host host:$(ip -4 addr show docker0 | grep -po 'inet \k[\d.]+') \
--add-host host:$(/sbin/ip route|awk '/docker0/ ') \
通過容器環境變數
下面2條命令是等效的
-e docker_host=$(ip -4 addr show docker0 | grep -po 'inet \k[\d.]+') \
-e docker_host=$(/sbin/ip route|awk '/docker0/ ') \
準備映象
docker pull nginx;
docker pull devilbox/php-fpm:5.6-prod
建立容器
建php容器
docker run -d --name php -p 9000:9000 \
-e docker_logs=1 \
-e forward_ports_to_localhost='3306:172.31.0.18:3306' \
-v $pwd/www:/var/www/default/htdocs \
-v $pwd/logs:/var/log/php \
devilbox/php-fpm:5.6-prod
建nginx容器
docker run -d --name nginx_80 -p 80:80 \
--add-host host:$(ip -4 addr show docker0 | grep -po 'inet \k[\d.]+') \
-v $pwd/www:/tol/nginx/www \
-v $pwd/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
-v $pwd/conf/conf.d:/etc/nginx/conf.d:ro \
-v $pwd/logs:/var/log/nginx \
--volumes-from php \
-u root nginx
注意:nginx並沒有link php容器,但通訊前提是:php容器埠要繫結到宿主機9000埠上
編寫配置檔案
nginx配置檔案(部分)
server '
用法docker run -d --name nginx_80 -p 80:80 \
--add-host host:$(ip -4 addr show docker0 | grep -po 'inet \k[\d.]+') \
--add-host host2:$(/sbin/ip route|awk '/docker0/ ') \
-e docker_host=$(ip -4 addr show docker0 | grep -po 'inet \k[\d.]+') \
-e docker_host2=$(/sbin/ip route|awk '/docker0/ ') \
-v $pwd/www:/tol/nginx/www \
-v $pwd/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
-v $pwd/conf/conf.d:/etc/nginx/conf.d:ro \
-v $pwd/logs:/var/log/nginx \
--volumes-from php \
-u root nginx
容器內部,獲取宿主機docker0 ip的方式
1.通過容器host檔案
cat /etc/profile
172.17.0.3 host
172.17.0.3 host2
2.通過容器環境變數
echo $docker_host
列印:172.17.0.3
echo $docker_host2
列印:172.17.0.3
docker 宿主機與容器間複製檔案
將當前目錄的test.txt檔案複製到container容器的 home目錄下 docker cp container home test.txt home 將container容器內檔案複製到宿主機 我使用的為centos7 docker 1.12.6,其他版本不確定是否提供該命令 示例 假設我有...
docker宿主機訪問docker容器服務失敗
原因 因為docker的虛擬ip網段是172.17.與區域網的ip網段172.17衝突了,所以有兩種方式 解決方法 一 修改docker網絡卡資訊,將網段改為與區域網不同的即可 linux修改方法 第一步 刪除原有配置 sudo service docker stop sudo ip link se...
Docker容器訪問宿主機網路
業務請求量小的時候,我們會把一些工程部署到同一臺機器上。這些工程之間也會相互訪問。如果是http的介面,我們最方便的是使用localhost帶地本機的ip。不過結合docker容器後出現了問題。docker容器中localhost表示容器的ip位址。不是宿主機ip。其實docker容器執行的時候有h...