我需要将 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网络进行通信。
这或多或少可能是这样
或使用 docker-compose
就评论中提到的当前问题而言,您尚未启动 PHP,最好检查容器的日志。
关于php - 是否可以在同一个 Dockerfile 中包含 PHP + MongoDb + Nginx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57901021/