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

标签 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的whith。
因此,我尝试在重新启动之前停止symfony Web服务器,但它不起作用。我很困惑,因为问题来自CMD语句,但是我无法真正更改它,因为在运行容器时需要启动Web服务器。一种可能是在另一个Web服务器(如apache)上运行symfony应用程序,但是使用symfony Web服务器非常方便,我认为这不是生产的最佳实践(但这是一个个人项目)。
所以我很困惑,如果有人知道了为什么它不起作用

最佳答案

此行为可能是由于CMD中的cd命令所致。您应该改用WORKDIR并在CMD中仅保留服务器启动命令
我也建议使用docker compose。您可以在这里找到完整的教程https://knplabs.com/fr/blog/how-to-dockerise-a-symfony-4-project

关于php - 容器内的Symfony Web服务器重新启动时导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63076951/

相关文章:

python - Docker如何将python 3.8设为默认

python - 错误 : Got unexpected extra argument (/start-reload. sh) 为 FastAPI docker 设置 Development live reload 时

PHP函数名以一个下划线开头

linux - 更新替代品 : update java path

php - 当用户在输入框中输入唯一代码时,从 mysql 数据库检索用户配置文件详细信息

c++ - 打包 Linux 软件,同时保持合理的文件结构

c - 有没有办法让我的二进制文件对 Linux 中的某些全局热键使用react?

node.js - 无法基于 Node :8. 1 镜像为 Node 应用程序构建 Docker 容器

php - 在 PHP 或 MySQL 上生成周五截止时间

php - 本地主机给出错误 "ERR_NAME_NOT_RESOLVED "