docker工人组成yaml – 命令

我想用mysql来运行一个新的数据库的创build

这是我在我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! 

那么如何重新编写命令,让服务正常运行?

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

我想你应该运行mysql容器,然后有另一个容器做数据导入。 例:

。证书

 MYSQL_ALLOW_EMPTY_PASSWORD=true MYSQL_USER=mxdb MYSQL_PASSWORD=mxdb MYSQL_DATABASE=mxdb 

运行容器:

 docker run --name mydb -d --env-file .credentials mysql 

如果你想从文件导入数据,创build一个新的容器,链接到已经运行的容器并进行导入:

 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" 

如果你只是想运行一个命令,使用:

 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来创build数据库。

在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 

然后创build数据库:

 create database testing_db; 

如果你需要自动创build这个数据库,你可以把这些SQL命令放在一个文件中,并在需要时执行:

 cat init_db.sql | mysql -umxdb -pmxdb 

如果你使用mysql的这个镜像:tutum / mysql你可以在启动时将你想创build的数据库的名字作为一个环境variables来添加:

环境:

-ON_CREATE_DB = “newdatabase”


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

命令:run.sh

而你的脚本:

/ usr / bin / mysqld_safe&

mysqladmin创buildtesting_db