docker – 与多个数据库组成

我试图找出如何使用docker-compose.yml与从SQL转储导入2个数据库实现docker。

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组成文件,创build2个数据库,并导入各自的SQL转储。 任何人有任何build议?

你正试图将两个数据库容器绑定到同一个端口 – 3306 。 这实际上是不可能的。 您需要更改其中一个数据库的端口映射,例如, mysql保持3306:3306 ,而mysql2应该使用3307:3306

就像任何人可能会看到这一点的更新。

我解决了这个通过删除:

 MYSQL_DATABASE: dbname 

docker-compose.yml中添加相关的create database语句直接添加到传递给docker-entrypoint-initdb.d的sql文件中。

在那个阶段,sql命令在根目录下执行,所以你还需要添加一个语句来赋予你想要使用的数据库用户相关的权限。