我在容器内运行一个Symfony应用程序。它工作正常,但是当我重新启动容器时,容器退出,代码为0。我只能执行docker kill container && docker rm container && docker run -d -p 8000:8000 --name container image/path
才能更新容器。
这是我的Dockerfile的简化版本
FROM php:7.2
RUN docker-php-ext-install pdo pdo_mysql
RUN apt-get update && apt-get install wget -yq && wget https://get.symfony.com/cli/installer -O - | bash && mv /root/.symfony/bin/symfony /usr/local/bin/symfony
COPY . /app
COPY ./php.ini /usr/local/etc/php/
CMD cd /app/ && symfony server:start --no-tls
使用docker restart container
docker logs
cmd返回值
[Web Server/PHP ] Jul 24 14:55:28 |INFO | PHP listening path="/usr/local/bin/php-cgi" php="7.2.31" port=33139
[Web Server/PHP ] Jul 24 14:55:28 |DEBUG| PHP started
[OK] Web server listening
The Web server is using PHP CGI 7.2.31
http://127.0.0.1:8000
[WARNING] The local web server is already running
Local Web Server
Listening on http://127.0.0.1:8000
The Web server is using PHP CGI 7.2.31
Local Domains
Workers
No Workers
Environment Variables
None
然后退出,代码为0。
因此,我尝试在重新启动之前停止symfony Web服务器,但它不起作用。我很困惑,因为问题来自CMD语句,但是我不能真正更改它,因为在运行容器时需要启动Web服务器。一种可能是在另一个Web服务器(如apache)上运行symfony应用程序,但是使用symfony Web服务器非常方便,我认为这不是最佳的生产实践(但这是一个个人项目)。
所以我很困惑,如果有人有想法,为什么它不起作用
答案 0 :(得分:0)
此行为可能是由于CMD中的cd命令所致。您应该改用WORKDIR并在CMD中仅保留服务器启动命令 我也建议使用docker compose。您可以在https://knplabs.com/fr/blog/how-to-dockerise-a-symfony-4-project
中找到完整的教程答案 1 :(得分:0)
好的,所以运行symfony服务器进行生产不是一个好主意,我只是基于php-apache镜像创建了一个新的docker镜像,一切运行得更好