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