docker-compose с несколькими базами данных
Я пытаюсь выяснить, как реализовать docker с помощью docker-compose.yml с 2 базами данных, импортированных из SQL-дампов.
httpd:
container_name: webserver
build: ./webserver/
ports:
- 80:80
links:
- mysql
- mysql2
volumes_from:
- app
mysql:
container_name: sqlserver
image: mysql:latest
ports:
- 3306:3306
volumes:
- ./sqlserver:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: dbname1
MYSQL_USER: dbuser
MYSQL_PASSWORD: dbpass
mysql2:
extends: mysql
container_name: sqlserver2
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: dbname2
MYSQL_USER: dbuser
MYSQL_PASSWORD: dbpass
app:
container_name: webdata
image: php:latest
volumes:
- ../php:/var/www/html
command: "true"
вышеуказанное возвращает следующее:
Kronos:mybuild avanche$ ./run.sh
Creating sqlserver
Creating webdata
Creating sqlserver2
ERROR: for mysql2 driver failed programming external connectivity on endpoint sqlserver2 (6cae3dfe7997d3787a8d59a95c1b5164f7431041c1394128c14e5ae8efe647a8): Bind for 0.0.0.0:3306 failed: port is already allocated
Traceback (most recent call last):
File "<string>", line 3, in <module>
File "compose/cli/main.py", line 63, in main
AttributeError: 'ProjectError' object has no attribute 'msg'
docker-compose returned -1
в основном, я пытаюсь получить всю настройку стека в одном файле docker compose, создать 2 базы данных и импортировать соответствующие дампы sql. У кого-нибудь есть предложения?
3 ответов
вы пытаетесь привязать оба контейнера базы данных к одному порту -3306
. Что, в сущности, невозможно.
Необходимо изменить сопоставление портов для одной из баз данных, например mysql
держит 3306:3306
и mysql2
должны использовать 3307:3306
.
Так же, как обновление для всех, кто может заглянуть в это.
Я решил это, удалив:
MYSQL_DATABASE: dbname
С докер-сочинять.в формате YML и добавление соответствующих инструкций create database непосредственно в файл sql, передаваемый в docker-entrypoint-initdb.d.
на этом этапе команды sql выполняются под root, поэтому вам также нужно добавить инструкцию для предоставления соответствующих разрешений пользователю базы данных, которого вы хотите использовать.
version: '3'
services:
mysql1:
image: mysql:5.6.26
environment:
MYSQL_ROOT_PASSWORD: asdf
MYSQL_USER: asdf
MYSQL_HOST: localhost
MYSQL_PASSWORD: asdf
MYSQL_DATABASE: asdf
ports:
- "3307:3306"
mysql2:
image: mysql:5.6.26
environment:
MYSQL_ROOT_PASSWORD: asdf
MYSQL_USER: asdf
MYSQL_HOST: localhost
MYSQL_PASSWORD: asdf
MYSQL_DATABASE: asdf
ports:
- "3308:3306"
- после
docker-compose up
-
подключение к mysql1
mysql -h localhost -uasdf -P 3307 -pasdf asdf --protocol=tcp -D asdf
-
подключение к mysql2
mysql -h localhost -uasdf -P 3308 -pasdf asdf --protocol=tcp -D asdf