docker 容器間通過宿主機IP間接通訊

2021-09-23 18:35:51 字數 2081 閱讀 1924

容器間通過宿主機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...