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

Docker with Multiple Mysql Container not working

此处是Docker新手。

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

这是我的docker-compose.yml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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时,它显示了以下错误:

ERROR: for consultingdocker_mysql2_1 Cannot start service mysql2:
driver failed programming external connectivity on endpoint
consultingdocker_mysql2_1
(7eac3d28093db7be7b5c81495ee652f6a1df8208388d33df668f1732a118481a):
Bind for 0.0.0.0:3306 failed: port is already allocated

ERROR: for mysql2 Cannot start service mysql2: driver failed
programming external connectivity on endpoint
consultingdocker_mysql2_1
(7eac3d28093db7be7b5c81495ee652f6a1df8208388d33df668f1732a118481a):
Bind for 0.0.0.0:3306 failed: port is already allocated ERROR:
Encountered errors while bringing up the project.

请让我知道我在这里想念什么?


" port "阵列配置反转。
如果您这样写:

1
2
port:
  -"3306:3307"

表示"将主机网络上的端口3306绑定到容器网络中的端口3307"。

虽然您想要完全相反。

交换数字即可使用


容器mysql已在主机上使用

端口3306在主机上,因此您不能在主机上为mysql2容器分配相同的端口。将您的mysql2服务配置更改为以下内容,它应该可以工作-

1
2
3
4
5
6
7
8
9
  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上可用。