![](/img/trans.png)
[英]Dockerfile | Alpine | Nginx | php7 | MongoDB | Redis
[英]Is possible to have PHP + MongoDb + Nginx in the same Dockerfile?
我需要將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
entrypoint.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上下文中,不是推薦的方法。
將每個容器限制為一個過程是一個很好的經驗法則 。
解耦應用
每個容器應該只有一個方面。 將應用程序解耦到多個容器中,可以更輕松地水平縮放和重復使用容器。 例如,一個Web應用程序堆棧可能由三個單獨的容器組成,每個容器都有自己的唯一映像,以分離的方式管理Web應用程序,數據庫和內存中的緩存。
因此最好使用docker-compose並啟動三個容器,並使用docker網絡進行通信。
這將或多或少地
或使用docker-compose
至於當前的問題(如注釋中所述),您尚未啟動PHP,最好檢查一下容器的日志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.