docker-compose运行两个mysql实例

时间:2018-03-01 21:39:13

标签: mysql docker

我想使用docker-compose运行两个mysql实例。

我在Docker容器中运行MySQL,并且我有另一个运行python脚本的Docker容器来访问MySQL数据库。

一个在端口3306上工作正常。为了让两个工作,我想我会在另一个端口上运行另一个。但是当我将其更改为不同的端口(例如6603)时,但是当我这样做时,我得到以下错误:

mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'mysql:6603' (111 Connection refused)

我已经阅读了s.o上的每一个问题。我觉得这似乎很相关,但没有一个解决方案有效。我确信修复将涉及更改一行或两行配置,但到目前为止我花费了很多时间,所以任何帮助都将非常感激。

下面是docker-compose脚本(如果6603被替换为3306,则工作正常。)

server:
   build:
    context: ../
    dockerfile: Docker/ServerDockerfile
   ports:
    - "8080:8080"
   links:
    - mysql:mysql
   volumes:
    - ../py:/app
   tty: true

 mysql:
  image: mysql
  expose:
    - "6603"
  environment:
   MYSQL_ROOT_PASSWORD: password
   MYSQL_DATABASE: project
  volumes:
    - ./MySQL:/docker-entrypoint-initdb.d
    - ./MySQL/data:/var/lib/mysql

它的访问方式如下:

cnx = mysql.connector.connect(user='root', password='password',
                          host='mysql',
                          port="6603",
                          database='project')

2 个答案:

答案 0 :(得分:0)

尝试通过修改其my.cnf文件为MySQL指定另一个端口。

答案 1 :(得分:0)

最终找到了几种有效的方法。最好的一个是每个应用程序创建一个网络并将容器连接到它。

如果每个应用程序使用不同的网络,则mysql可以在该Docker网络上的3306上运行,并且可以在app1上的mysql:// 3306和app2的mysql2:// 3306上访问。 (假设你的名字你给app 2的mysql服务是mysql2)。

带有新行的Docker文件如下:

server:
 build:
context: ../
dockerfile: Docker/ServerDockerfile
ports:
 - "8080:8080"
volumes:
 - ../py:/app
tty: true
networks:
 -net

mysql2:
 image: mysql
 environment:
  MYSQL_ROOT_PASSWORD: password
  MYSQL_DATABASE: project
 volumes:
  - ./MySQL:/docker-entrypoint-initdb.d
  - ./MySQL/data:/var/lib/mysql
 networks:
  -net

networks:
 net:
  driver: bridge

第二个应用程序的Docker文件是相同的,只是名称不同(为简单起见,我在每个之后放了2个。)

 server2:
  build:
   context: ../
   dockerfile: Docker/ServerDockerfile
  ports:
 - "8081:8080"
 volumes:
 - ../py:/app
tty: true
networks:
 -net2

mysql2:
 image: mysql
 environment:
  MYSQL_ROOT_PASSWORD: password
  MYSQL_DATABASE: project
 volumes:
  - ./MySQL:/docker-entrypoint-initdb.d
  - ./MySQL/data:/var/lib/mysql
 networks:
  -net2

networks:
 net2:
  driver: bridge