gpt4 book ai didi

php - 是否可以在同一个 Dockerfile 中包含 PHP + MongoDb + Nginx?

转载 作者:行者123 更新时间:2023-12-03 02:12:35 24 4
gpt4 key购买 nike

我需要将 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-stretch
COPY --from=composer /usr/bin/composer /usr/bin/composer
RUN apt update
RUN apt install -y \
nginx \
mongodb
COPY nginx.conf /etc/nginx/nginx.conf
RUN pecl install mongodb
RUN docker-php-ext-enable mongodb

RUN service nginx start
RUN service mongodb start

EXPOSE 9091
EXPOSE 27017

COPY entrypoint.sh /
WORKDIR /usr/www
ENTRYPOINT ["/entrypoint.sh"]

COPY . /usr/www

入口点.sh

#!/bin/bash

set -e -u

service nginx start
service mongodb start

tail -f /dev/null

nginx.conf

events {
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;
}
}

最佳答案

是的,这是可能的,但在 docker 环境中这不是推荐的方法。

Limiting each container to one process is a good rule of thumb.

解耦应用

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

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

这或多或少可能是这样

enter image description here

或使用 docker-compose

enter image description here

就评论中提到的当前问题而言,您尚未启动 PHP,最好检查容器的日志。

关于php - 是否可以在同一个 Dockerfile 中包含 PHP + MongoDb + Nginx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57901021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com