Docker 容器间网络通讯

一、序言
本文介绍docker容器间的网络通讯。搭建宿主环境是window 10,docker 是laradock下的lnmp。
二、知识补充
引用 docker 官网原文

When you start Docker, a default bridge network (also called bridge) is created automatically, and newly-started containers connect to it unless otherwise specified. You can also create user-defined custom bridge networks.
意思就是docker启动的使用会有一个默认网络,用户也可自定义桥接网络。接下来我们就是用自定义网络,为容器间做网络通讯。
正常每个容器启动都有一个专属私有网络,在私有网络下容器内的各个应用网络是相通的。但是如果要容器间通讯就需要创建一个虚拟网络出来,通过此网络来进行通讯。
三、配置
1、用laradock安装好两个容器,安装过程网上大把教程,注意如果在同一宿主机上,同一应用软件的映射出来的端口不能相同,例如PHP 9001,mysql 3006 nginx 80 等。
安装成功后,在Docker Desktop 会出现两个容器名称,如图
Docker 容器间网络通讯
文章图片

2、创建新的用户自定义网络
docker network create --driver bridge testnet

【Docker 容器间网络通讯】3、在env文件中添加一环境变量,如
NATWORK_NAME=testnet
4、在docker-compose.yml 添加新的网络(只能添加,尽量不把laradock原有网络删掉,不然后续所有网络都要跟着改,很麻烦)
networks: frontend: driver: ${NETWORKS_DRIVER} backend: driver: ${NETWORKS_DRIVER} default: external: name: ${NATWORK_NAME}

5、在docker-compose.yml 各所需服务中添加添加新网络
nginx: build: context: ./nginx args: - CHANGE_SOURCE=${CHANGE_SOURCE} - PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER} - PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT} - http_proxy - https_proxy - no_proxy volumes: - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG} - ${NGINX_HOST_LOG_PATH}:/var/log/nginx - ${NGINX_SITES_PATH}:/etc/nginx/sites-available - ${NGINX_SSL_PATH}:/etc/nginx/ssl ports: - "${NGINX_HOST_HTTP_PORT}:80" - "${NGINX_HOST_HTTPS_PORT}:443" - "${VARNISH_BACKEND_PORT}:81" depends_on: - php-fpm networks: - frontend - backend - default

6、重新启动docker 各容器
四、检查网络
1、安装成功启动后,检查网络
docker network ls
Docker 容器间网络通讯
文章图片

查看testnet 链接情况,确保所有容器都有用到该网络;
docker network inspect testnet
如果所有应用都出现在此网络里面,证明容器网络已经通了
Docker 容器间网络通讯
文章图片

也可以安装ping命令进行测试;
apt-get update
apt-get install iputils-ping
apt-get install net-tools
五、HTTP通讯
此时只是网通了,因为DNS原因带域名http还不能通讯。
需要在客户端php应用里面的/etc/hosts里面添加请求网址所在的nginx容器ip,如
echo“172.21.0.8domain.com”>> /etc/hosts

测试:
curl -d "key1=value1&key2=value2&key3=value3" http://domain.com/swagger/test

如果正常有返回则完成

    推荐阅读