01-DockerCompose

1、DockerCompose容器之间相互访问

同一台宿主机下的不同的docker容器相互访问的情况

(1)、方案一:加入同一网络

首先Docker创建网络

docker network create dev_net

举例: Nacos链接Mysql

services:
  mysql:
    #mysql服务节点
    image: mysql:5.7 #mysql镜像,如果镜像容器没有会去自动拉取
    container_name: mysql #容器的名称
    ## *这里需要加入上面创建的网络*
    networks:
      - dev_net
    deploy:
      resources:
        limits:
          memory: 1G
    command:
      #构建容器后所执行的命令
      --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --lower-case-table-names=1 #忽略数据表明大小写 
    restart: no #跟随docker的启动而启动
    environment:
      MYSQL_ROOT_PASSWORD: root #设置root帐号密码
    ports:
      - 3306:3306
    volumes:
      - ./mysql/data:/var/lib/mysql #数据文件挂载
      - ./mysql/conf.d:/etc/mysql/conf.d #配置文件挂载
      - ./mysql/log:/var/log/mysql #日志文件挂载
# 这里引入创建的网络
networks:
  dev_net:
    external: true
services:
  nacos:
    image: nacos/nacos-server:v2.2.2
    container_name: nacos
    ## *这里需要加入上面创建的网络*
    networks:
      - dev_net
    restart: no
    ports:
      - 8848:8848
      - 9848:9848
      - 9849:9849
    environment:
      TZ: Asia/Shanghai
      MODE: standalone
      SPRING_DATASOURCE_PLATFORM: mysql
      #加入同一个网络后可以直接使用容器name来通信
      MYSQL_SERVICE_HOST: mysql
      #直接连接容器端口,不是映射到宿主机的端口
      MYSQL_SERVICE_PORT: 3306
      MYSQL_SERVICE_USER: root
      MYSQL_SERVICE_PASSWORD: root
      MYSQL_SERVICE_DB_NAME: nacos
      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 inspect dev_net

就会出现以下内容

查看网络

这里的Containers里面显示的是加入此网络的容器名称。

作者:何贤刚  创建时间:2024-05-12 22:06
最后编辑:何贤刚  更新时间:2024-05-12 22:15