我对Docker相对较新-我正在尝试构建一个系统来运行Symfony 4应用程序,该应用程序由PHP-FPM,nginx和MySQL组成。
除了一件事外,其他所有事情都应该正常工作。当PHP-FPM容器启动时,我要运行:
#!/bin/bash
composer install
bin/console doctrine:database:create --if-not-exists
bin/console doctrine:schema:update --force
bin/console doctrine:fixtures:load --no-interaction
我使用这些命令创建了一个脚本,然后如下编辑我的DockerFile:
COPY ./docker/php/startup.sh /usr/local/bin/startup.sh
RUN ["chmod", "+x", "/usr/local/bin/startup.sh"]
ENTRYPOINT ["/usr/local/bin/startup.sh"]
我遇到的问题是,当我先运行docker-compose build
然后再运行docker-compose up
时,我可以看到脚本正在运行,但是其中的某些内容会导致容器失败并自行重启-然后脚本再次运行,并且循环继续。 docker-compose.yml已指定restart: unless-stopped
。
我想知道其中一个命令是否以非零代码退出,因此尝试将exit 0
添加到脚本末尾,但无济于事。
我在做蠢事吗?需要明确的是,我希望此脚本在容器的第一次启动时自动运行(如果每次启动都以其应有的价值运行,而不仅仅是第一次 ,那很好。)
答案 0 :(得分:0)
https://docs.docker.com/engine/reference/builder/#entrypoint
当您定义脚本的入口点时。它运行它,然后结束,这意味着入口点已经完成。(因此脚本不执行任何错误)
因此,您需要将您的入口点指定为php-fpm,甚至睡眠都可以解决此问题。