在工作中我们可能需要数据库和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
GitHub 加速计划 / compose / compose
33.26 K
5.15 K
下载
compose - Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,通过Compose文件格式简化应用部署过程。
最近提交(Master分支:2 个月前 )
82417bd5 Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com> 2 天前
0cbb73c0 Updated the error message when a network is found with an incorrect label to also display the expected label value. This provides more context for debugging. Signed-off-by: divinity76 <hans@loltek.net> 3 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐