docker-compose запустить два экземпляра mysql

0

Я хочу запустить два экземпляра mysql, используя docker-compose.

Я запускаю MySQL в контейнере Docker, и у меня есть еще один контейнер Docker с скриптом python для доступа к базе данных MySQL.

Один работает отлично на порту 3306. Для того, чтобы получить две рабочие, я думал, что просто запустил другой на другом порту. Но когда я меняю его на другой порт (например, 6603), но когда я это делаю, я получаю следующую ошибку:

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

Я прочитал каждый вопрос, чтобы найти, что кажется актуальным, но ни одно из решений не работает. Я уверен, что исправление будет связано с изменением одной или двух конфигураций, но я потратил много часов на это, так что любая помощь будет очень признательна.

Ниже приведен скрипт для сборки докеров (отлично работает, если 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')
  • 3
    Попробуйте "6603:3306" .
  • 0
    Как? Я попытался выставить: - "6603: 3306", но это недопустимо (выдает ошибку services.mysql.expose недопустимо: должен иметь формат 'PORT [/ PROTOCOL]'). И я попытался использовать порты: - "6603: 3306 ", но это не изменило первоначальный результат (соединение отказано).
Теги:
docker

2 ответа

0
Лучший ответ

В конце концов нашли пару способов, которые работают. Самый удобный для каждого приложения - создать сеть и подключить к ней контейнеры.

Если каждое приложение использует другую сеть, то mysql может работать на 3306 в этой сети Docker и может быть обращено на mysql://3306 из app1 и mysql2://3306 из app2. (Предполагая, что вы даете mysql-сервис для приложения 2, это 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 для второго приложения идентичен, за исключением того, что имена разные (для простоты я добавляю по два для каждого).

 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
0

Попробуйте указать другой порт для MySQL, изменив его файл my.cnf.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню