2015-10-06 159 views
1

我想用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! 

那么我该如何重新迭代命令部分,所以我得到的服务正常工作?

我想创建多个数据库。所以手动使用命令是最简单的方法。

+0

MySQL的哪些图像是您使用? –

+1

'image:mysql'表示它是官方的'mysql',标签为'latest'。 https://hub.docker.com/_/mysql/ – haradwaith

回答

0

我想你应该运行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" 
1

我不认为你应该重写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 
+1

这是可行的解决方案,但是如果您想创建多个数据库并使用docker-compose scale,它将不方便。 –

0

如果你使用MySQL这个形象:tutum/MySQL的 您可以添加要在启动时创建成一个环境变量的数据库名称:

环境:

-ON_CREATE_DB = “newdatabase”


另一个解决方案是在命令部分放置一个shell脚本。在脚本中启动mysql,然后创建数据库并添加用户:

command:run。SH

而且你的脚本:

在/ usr /斌/ mysqld_safe的&

中mysqladmin创建testing_db

+0

此脚本不起作用。首先,您必须将自己的脚本放在Docker镜像中,并使用自定义的Dockerfile。然后,只要脚本结束,MySQL服务器就会停止(因为'command'完成了)。最后,如果数据库已经存在,创建将会崩溃。 – haradwaith

+0

'tatum/mysql'映像上的'ON_CREATE_DB'环境变量等同于正在使用的官方mysql映像中的'MYSQL_DATABASE'变量。 – haradwaith