为了账号安全,请及时绑定邮箱和手机立即绑定

可以在同一个 Dockerfile 中有 PHP + MongoDb + Nginx 吗?

可以在同一个 Dockerfile 中有 PHP + MongoDb + Nginx 吗?

PHP
慕姐4208626 2022-01-08 14:53:16
我需要让 3 项服务仅在一个 docker 容器中运行。我在一个 docker-compose 中完成了这个“系统”,但由于一些限制,我只需要将它放入一个 dockerfile 中。我要运行的应用程序是 PHP(使用 Symfony)+ MongoDb。现在,我正在执行这个命令:sudo docker run -p 9091:80 -p 27017:27017 myapp当我浏览到 localhost:9091 时,我得到的最大值是 502 错误。谢谢Dockerfile:FROM php:7.3-fpm-stretchCOPY --from=composer /usr/bin/composer /usr/bin/composerRUN apt updateRUN apt install -y \    nginx \    mongodbCOPY nginx.conf /etc/nginx/nginx.confRUN pecl install mongodbRUN docker-php-ext-enable mongodbRUN service nginx startRUN service mongodb startEXPOSE 9091EXPOSE 27017COPY entrypoint.sh /WORKDIR /usr/wwwENTRYPOINT ["/entrypoint.sh"]COPY . /usr/www入口点.sh#!/bin/bashset -e -uservice nginx startservice mongodb starttail -f /dev/nullnginx.confevents {    worker_connections  1024;}http {    server {        listen 80;        server_name localhost;        root /usr/www/public;        location / {            try_files $uri /index.php$is_args$args;        }        location ~ ^/index\.php(/|$) {            fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;            fastcgi_split_path_info ^(.+\.php)(/.*)$;            include fastcgi_params;            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;            fastcgi_param DOCUMENT_ROOT $realpath_root;        }        error_log /dev/stderr debug;        access_log /dev/stdout;    }}
查看完整描述

2 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

是的,这是可能的,但这不是 docker 上下文中推荐的方法。

将每个容器限制为一个进程是一个很好的经验法则

解耦应用程序

每个容器应该只有一个关注点。将应用程序解耦到多个容器中,可以更轻松地水平扩展和重用容器。例如,一个 Web 应用程序堆栈可能由三个独立的容器组成,每个容器都有自己独特的图像,以分离的方式管理 Web 应用程序、数据库和内存缓存。

所以最好使用docker-compose并启动三个容器并使用 docker 网络进行通信。

这将或多或少

//img1.sycdn.imooc.com//61d9350e000133ec09320465.jpg

或使用 docker-compose

//img1.sycdn.imooc.com//61d9351a00019ee910000484.jpg

至于评论中提到的当前问题,您没有启动 PHP,最好检查容器的日志。


查看完整回答
反对 回复 2022-01-08
?
烙印99

TA贡献1829条经验 获得超13个赞

您的 dockerfile 的问题是您没有启动 php-fpm。您应该使用 supervisord 来管理单个容器中的多个服务,文档非常清楚地解释了这个用例。

您还可以参考示例以获取 nginx、php-fpm 和 mysql 的完整 supervisord conf。

作为一种观点,在一个容器中运行多个服务是不可取的。


查看完整回答
反对 回复 2022-01-08
  • 2 回答
  • 0 关注
  • 203 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信