多个Mysql容器的Docker无法正常工作

时间:2018-01-19 10:31:08

标签: mysql docker docker-compose containers

Docker新手在这里。

我想要实现的是使用docker compose运行多个MySQL容器。

这是我的docker-compose.yml:

version: '2'
services:
  mysql:
    build: ./docker-configs/mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: admin
    volumes:
      - ./data/mysql:/var/lib/mysql
      - ./data/init.d:/docker-entrypoint-initdb.d
  mysql2:
    build: ./docker-configs/mysql2
    ports:
      - "3306:3307"
    environment:
      MYSQL_ROOT_PASSWORD: admin
    volumes:
      - ./data/mysql2:/var/lib/mysql2
      - ./data/init.d:/docker-entrypoint-initdb.d  
  nginx-proxy:
     image: jwilder/nginx-proxy
     volumes:
        - /var/run/docker.sock:/tmp/docker.sock:ro
        - /etc/localtime:/etc/localtime:ro
        - ./docker-configs/nginx-proxy/certs:/etc/nginx/certs
     ports:
        - '80:80'
        - '443:443'

但是当我运行docker-compose up -d时,它会向我显示以下错误:

  

错误:对于consultingdocker_mysql2_1无法启动服务mysql2:   驱动程序在端点上编程外部连接失败   consultingdocker_mysql2_1   (7eac3d28093db7be7b5c81495ee652f6a1df8208388d33df668f1732a118481a):   绑定0.0.0.0:3306失败:端口已分配

     

错误:对于mysql2无法启动服务mysql2:驱动程序失败   编程端点上的外部连接   consultingdocker_mysql2_1   (7eac3d28093db7be7b5c81495ee652f6a1df8208388d33df668f1732a118481a):   绑定0.0.0.0:3306失败:端口已经分配错误:   在启动项目时遇到错误。

请让我知道我在这里失踪了什么?

2 个答案:

答案 0 :(得分:3)

" port"数组配置是反转的。 如果你这样写:

port:
  - "3306:3307"

它意味着"将主机网络上的端口3306绑定到容器网络中的端口3307"。

虽然你想要完全相反。

交换数字并且它可以正常工作

答案 1 :(得分:2)

端口3306已由容器mysql在主机上使用,因此您无法在mysql2容器的主机上分配相同的端口。将您的mysql2服务配置更改为以下内容,它应该有效 -

  mysql2:
    build: ./docker-configs/mysql2
    ports:
      - "3307:3307"
    environment:
      MYSQL_ROOT_PASSWORD: admin
    volumes:
      - ./data/mysql2:/var/lib/mysql2
      - ./data/init.d:/docker-entrypoint-initdb.d  

现在,您的mysql2服务将在主机上的端口3307上提供。