同一台宿主机不同的docker-compose下的容器互相通信;查看docker的network使用情况

概述

我的docker版本:24.0.2
docker-compose版本:1.29.2
linuxubuntu 20.04

在使用docker部署环境的时候大多用docker-compose来编排,参数的配置会清晰一点。

通常一个容器一个docker-compose.yml文件。
这就使得不同docker-compose下的容器不能自动的互相通信。
那么顺着这个思路往下想,就需要让他们都加入同一个网络,问题就解决了。

加入同一网络方案

先创建一个公共网络

sudo docker network create dev_net 

在各自的docker-compose文件中声明该网络。
比如我这里有mysqlnacos两个容器,加入同一个网络后可以直接用容器name来通信,并且端口可以直接使用容器内的端口.

启动之后可以可以容器内部,然后ping一下对方的容器name来测试下,如果ping不通;此时可以手动让容器加入同一个网络。

该方案也适用于那些没有在docker-compose中配置网络的容器,相当于手动让他们加入同一个网络

docker network connect dev_net nacos

mysql

version: '3'
services:
  mysql:
    image: mysql:5.7.35 #镜像名称以及版本
    deploy:
      resources:
          limits:
             memory: 1G
    restart: always #重启docker后该容器也重启
    container_name: mysql_5_7 #容器名称
    networks:
        - dev_net
    environment:
      MYSQL_ROOT_PASSWORD: xxxx #指定用户密码
      TZ: Asia/Shanghai
    ports:
      - 33306:3306 #本地端口号与容器内部端口号
    volumes: #指定挂载目录
      - ./data:/var/lib/mysql
      - ./conf/my.cnf:/etc/mysql/my.cnf

networks:        
  dev_net:
     external: true

nacos

version: '3'

services:
  nacos:
    image: nacos/nacos-server:v2.0.4
    container_name: nacos
    networks:
       - dev_net
    restart: always
    ports:
      - 8848:8848
      - 9848:9848
      - 9849:9849
    environment:
      TZ: Asia/Shanghai
      MODE: standalone
      SPRING_DATASOURCE_PLATFORM: mysql
      #加入同一个网络后可以直接使用容器name来通信
      MYSQL_SERVICE_HOST: mysql_5_7
      #直接连接容器端口,不是映射到宿主机的端口
      MYSQL_SERVICE_PORT: xxx
      MYSQL_SERVICE_USER: x
      MYSQL_SERVICE_PASSWORD: xxxxx
      MYSQL_SERVICE_DB_NAME: nacos_config
      MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    volumes:
      - ./logs/:/home/nacos/logs

networks:        
  dev_net:
     external: true      

查看docker的network使用情况

#查看所有的网络
docker network ls

#删除某个网络---删除前要断开正在使用这个网络的容器
docker network rm 网络名

#将容器从某个网络中断开
docker network disconnect <network_name> <container_name_or_id>

#查看某个网络中使用的容器name列表
docker network inspect 网络名称 --format='{{ range $key, $value := .Containers }}{{ $value.Name }} {{ end }}'

你可能感兴趣的:(linux,docker,docker,容器,运维)