搬运工撰写YAML - 命令
我想用mysql搬运工撰写YAML - 命令
运行创建一个新的数据库,这是片断我在我的docker-compose.yml
文件现在
mysql:
image: mysql
container_name: mysql-machine
ports:
- 3306:3306
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: true
MYSQL_DATABASE: mxdb
MYSQL_USER: mxdb
MYSQL_PASSWORD: mxdb
command: mysqladmin create testing_db
当我运行docker-compose up
我看控制台,它说
mysql_1 | mysqladmin: connect to server at 'localhost' failed
mysql_1 | error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
mysql_1 | Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!
那么我该如何重新迭代命令部分,所以我得到的服务正常工作?
我想创建多个数据库。所以手动使用命令是最简单的方法。
我想你应该运行mysql的容器,然后有另一容器做数据导入。例如:
.credentials
MYSQL_ALLOW_EMPTY_PASSWORD=true
MYSQL_USER=mxdb
MYSQL_PASSWORD=mxdb
MYSQL_DATABASE=mxdb
运行容器:如果你想从文件导入数据,创建一个新的容器,链接到一个已在运行
docker run --name mydb -d --env-file .credentials mysql
并进行导入:
docker run --rm -t --link mydb:DB -v /path/to/dump.sql:/dump.sql mysql bash -c "mysql -h DB -u mxdb -pmxdb mxdb < /dump.sql"
如果你只是w蚂蚁运行一个命令,使用:
docker run --rm -t --link mydb:DB mysql mysql -h DB -u mxdb -pmxdb -e "CREATE DATABASE bar"
或
docker exec -t mydb mysql -u mxdb -pmxdb -e "CREATE DATABASE bar"
我不认为你应该重写command
来创建数据库。
在docker-compose中,command
应该是在Docker镜像中启动给定服务的命令。在你的情况下,该服务是一个MySQL服务器。如果您在docker_compose.yml中为mysql服务提供了command
,那么MySQL服务器将永远不会启动。
你应该做的是启动mysql
服务,然后在其中运行命令。
mysql:
image: mysql
container_name: mysql-machine
ports:
- 3306:3306
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: true
MYSQL_DATABASE: mxdb
MYSQL_USER: mxdb
MYSQL_PASSWORD: mxdb
启动服务:
docker-compose up
连接到它:
mysql -umxdb -pmxdb
然后创建数据库:
create database testing_db;
如果需要你完成这项创建数据库,你可以把这些SQL命令放在一个文件中,并做必要时:
cat init_db.sql | mysql -umxdb -pmxdb
这是可行的解决方案,但是如果您想创建多个数据库并使用docker-compose scale,它将不方便。 –
如果你使用MySQL这个形象:tutum/MySQL的 您可以添加要在启动时创建成一个环境变量的数据库名称:
环境:
-ON_CREATE_DB = “newdatabase”
另一个解决方案是在命令部分放置一个shell脚本。在脚本中启动mysql,然后创建数据库并添加用户:
command:run。SH
而且你的脚本:
在/ usr /斌/ mysqld_safe的&
中mysqladmin创建testing_db
此脚本不起作用。首先,您必须将自己的脚本放在Docker镜像中,并使用自定义的Dockerfile。然后,只要脚本结束,MySQL服务器就会停止(因为'command'完成了)。最后,如果数据库已经存在,创建将会崩溃。 – haradwaith
'tatum/mysql'映像上的'ON_CREATE_DB'环境变量等同于正在使用的官方mysql映像中的'MYSQL_DATABASE'变量。 – haradwaith
MySQL的哪些图像是您使用? –
'image:mysql'表示它是官方的'mysql',标签为'latest'。 https://hub.docker.com/_/mysql/ – haradwaith