关于docker:Docker-容器间网络通讯

48次阅读

共计 1798 个字符,预计需要花费 5 分钟才能阅读完成。

一、序言
本文介绍 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 会呈现两个容器名称,如图

2、创立新的用户自定义网络

docker network create --driver bridge testnet

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

查看 testnet 链接状况,确保所有容器都有用到该网络;
docker network inspect testnet

如果所有利用都呈现在此网络外面,证实容器网络曾经通了

也能够装置 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.8    domain.com”>> /etc/hosts

测试:

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

如果失常有返回则实现

正文完
 0