docker 编写 yaml - 命令

docker compose yaml - command

我想运行使用mysql

创建一个新数据库

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

那么如何重写命令部分,使服务正常工作?

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

我认为您不应该覆盖 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

如果您使用 mysql 的这张图片:tutum/mysql 您可以在启动时添加您要创建的数据库的名称作为环境变量:

environment:

-ON_CREATE_DB="newdatabase"


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

command : run.sh

在你的脚本上:

/usr/bin/mysqld_safe &

mysqladmin create testing_db

我认为您应该 运行 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

如果要从文件导入数据,请创建一个新容器,link 到已经 运行ning 的容器并执行导入:

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"