我正在寻找一种方法来设置一些命令在我的Dockerfile中运行,一旦我运行" docker run"
我的用例是我有2个容器,Web(Apache,PHP),DB(MySQL)
当我执行" docker run"在Web容器上,链接到数据库容器。我想在我的Web容器中执行迁移脚本。
我可以使用" docker exec"进入框并运行有效的迁移。我只想在可能的情况下使用Dockerfile或使用其他配置程序自动执行此操作。
由于 西蒙
答案 0 :(得分:3)
在任一图像中都有一个脚本(似乎更适合它存在于您的数据库映像中),并在启动Web服务器之前执行它。更好的是,将MySQL数据存储在卷中,以便在下次运行或重新启动数据库容器时,您不必担心迁移:
# 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
答案 1 :(得分:1)
Docker旨在运行一个进程,但可以运行多个进程。你应该看一下主管,见https://docs.docker.com/articles/using_supervisord/
答案 2 :(得分:0)
如果您真的想让db迁移成为docker容器运行的一部分,那么您可能会有一个更复杂的脚本作为命令,它首先执行迁移脚本然后运行Web服务。