Php Docker-入口点脚本导致重新启动
我对Docker比较陌生-我正在尝试构建一个系统来运行Symfony 4应用程序,包括PHP-FPM、nginx和MySQL 除了一件事,一切都正常运转。当PHP-FPM容器启动时,我想运行:Php Docker-入口点脚本导致重新启动,php,docker,docker-compose,Php,Docker,Docker Compose,我对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:fixture
#!/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已重新启动:除非按照方式指定停止
我想知道其中一个命令是否以非零代码退出,因此尝试将exit 0
添加到脚本末尾,但没有效果
我是在做傻事吗?要明确的是,我希望这个脚本在容器的第一次启动时自动运行(如果它以值得的方式运行每一次启动,而不仅仅是第一次启动,那就好了)
定义脚本的入口点时。它运行它,然后结束,这意味着entrypoint已经完成。(所以脚本不会执行任何错误)
因此,您需要指定php fpm的入口点,甚至sleep都可以解决此问题。使用exec“$@”
结束入口点脚本,使其作为主容器进程运行CMD,这通常是一种有用的模式。如果您不这样做,那么标准的调试技巧,如docker run--rm-it imagename/bin/sh
就不起作用了。谢谢-将php fpm
添加到脚本末尾就完成了这项工作。