0

一旦我运行“docker run”,我正在寻找一种设置一些命令以在我的 Dockerfile 中运行的方法

我的用例是我有 2 个容器,Web(Apache,PHP),DB(MySQL)

当我在 Web 容器上执行“docker run”并链接到 DB 容器时。我想在我的 Web 容器中执行迁移脚本。

我可以使用“docker exec”进入盒子并运行有效的迁移。如果可能的话,我只想使用 Dockerfile 或使用另一个配置程序来自动执行此操作。

谢谢西蒙

4

3 回答 3

2

只需在任一图像中都有一个脚本(似乎更有意义地将它放在您的数据库图像中),然后在启动 Web 服务器之前执行它。更好的是,将 MySQL 数据存储在一个卷中,以便在下次运行或重新启动 db 容器时不必担心迁移:

# migrate data into your volume
docker run --name mysql-data -v /my/mysql/data mysqlImage migrate.sh

# run mysql
docker run --name mysql -d --volumes-from mysql-data mysqlImage

# run www
docker run --name www -d --link mysql:mysql phpImage

您也可以将入口点设置为自定义脚本,我们称之为/my/run.sh

#!/usr/bin/env bash

mysqlimport ...

# don't know the syntax, but run apache in non-daemon mode
apache

然后:

docker run --name www -d --link mysql:mysql --entrypoint /my/run.sh phpImage
于 2015-02-18T21:47:00.640 回答
1

Docker 是为运行一个进程而设计的,但也可以运行多个进程。您应该查看主管,请参阅https://docs.docker.com/articles/using_supervisord/

于 2015-02-18T20:33:44.987 回答
0

如果你真的想让 db 迁移成为 docker 容器运行的一部分,你可能有一个更复杂的脚本作为命令,它首先执行迁移脚本,然后运行 ​​Web 服务。

于 2015-02-18T21:52:56.747 回答