多个docker-compose共享网络并相互调用服务

在工作中我们可能需要数据库和api接口分开部署的情况,如果都用docker-compose部署的话,
在有的操作系统中可能无法使用(ip+端口)连接数据库,必须使用服务名称去连接。
这时我们就需要让这两个docker-compose启动的服务共享网络,这样就可以相互调用服务了

数据库的docker-compose文件

  • 我们可以使用 docker network create my_net 创建一个网络,之后每个docker-compose.yml引用即可
  • 也可以先启动数据库服务,最后api服务的docker-compose.yml引用数据库的网络即可,这里我使用这种方式
version: '3'
services:
  db-mysql:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      - "3306:3306"
    container_name: mysql-container
    networks:
      - my_net
    environment:
      - MYSQL_ROOT_PASSWORD=root

  db-mysql:
    image: redis:5.0.5-alpine
    command: redis-server --appendonly yes
    restart: always
    ports:
      - "6379:6379"
    container_name: redis-container
    networks:
      - my_net

networks:
  my_net:
    driver: bridge

  • 这里需要指定网络 my_net,指定后网络名称为当前文件夹加上_my_net,如果不指定会使用当前文件夹的名称加上_default
  • 查看网络 docker network ls
  • 这里我查看的是 app_my_net

api的docker-compose文件

version: '3'
services:
  api:
    restart: always
    container_name: web-api
    build:
      context: ./web-api # 指定设定上下文根目录,然后以该目录为准指定Dockerfile
      dockerfile: Dockerfile
    networks:
      - app_my_net # 指定网络
    ports:
        - "8001:7001"
    environment:
     TZ: Asia/Shanghai

  web:
    image: nginx:1.17.0
    privileged: true
    restart: always
    container_name: web-front
    ports:
        - "8080:80"
    volumes:
      - ./web-front/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./web-front:/usr/share/nginx/html

networks:
  app_my_net:
    external: true # 来自外部

  • 在使用共享网络后,我们在连接 mysql和redis的使用就可以使用服务名称,db-mysql或db-mysql
上一篇:8、msyql性能分析工具


下一篇:centos docker上安装Nacos