容器内的Symfony Web服务器重新启动时导致问题

时间:2020-07-24 15:44:01

标签: php linux docker symfony

我在容器内运行一个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服务器非常方便,我认为这不是最佳的生产实践(但这是一个个人项目)。

所以我很困惑,如果有人有想法,为什么它不起作用

2 个答案:

答案 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镜像,一切运行得更好