如何在docker-compose.yml中运行php fpm?
我试图用docker compose构建一个容器。因此,我编写了dockerfile和docker-compose.yml,如下所示: dockerfile如何在docker-compose.yml中运行php fpm?,docker,docker-compose,Docker,Docker Compose,我试图用docker compose构建一个容器。因此,我编写了dockerfile和docker-compose.yml,如下所示: dockerfile FROM ubuntu:latest RUN apt-get update RUN apt-get install -y expect RUN apt-get -y install software-properties-common RUN apt-add-repository ppa:ondrej/php RUN apt-get -y
FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y expect
RUN apt-get -y install software-properties-common
RUN apt-add-repository ppa:ondrej/php
RUN apt-get -y install php7.1 php7.1-fpm
RUN apt-get install php7.1-mysql
RUN apt-get -y install nginx
RUN apt-get -y install vim
COPY default /etc/nginx/sites-available/default
COPY www.conf /etc/php/7.1/fpm/pool.d/www.conf
COPY test /var/www/html/test
CMD service php7.1-fpm start && nginx -g "daemon off;"
docker compose.yml
version: '3'
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "3011:80"
command: service php7.1-fpm start && nginx -g "daemon off;"
当我运行以下命令时,php7.1-fpm运行成功
docker-compose build
docker-compose up --force-recreate -d
但我想将CMD从dockerfile移动到docker compose,因此我更改了该文件,如下所示:
docker compose.yml
version: '3'
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "3011:80"
command: service php7.1-fpm start && nginx -g "daemon off;"
但这次php7.1-fpm没有运行
如何解决此问题,以便在docker compose.yml中运行php7.1-fpm?- 您不能在Dockerfile中使用
,因为容器只是一个进程,不是真正的虚拟机,主进程关闭,其他进程也不会关闭服务php7.1-fpm start
- docker建议您将它们分为不同的容器,php fpm、nginx、single image single container
- 解决方案:
docker/php fpm/Dockerfile
docker-compose.yml:来自php:7.2-fpm 运行docker php ext安装pdo pdo_mysql mbstring
版本:“2.1” 服务: nginx: 图片:nginx:latest 端口: - 8001:80 卷数: -./:/app #nginx配置 -./docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf php fpm: 构建:./docker/php fpm 卷数: -./:/app php编写器: 重新启动:“否” 图片:作曲家 卷数: -./:/app 命令:安装 nodejs: 重新启动:“否” 图:节点:8.9 卷数: -./:/app 命令:/bin/bash-c“cd/app&&npm安装&npm运行产品” 网络: 违约:
web
用于nginx和php
用于php fpm。这非常简单,在StackOverflow上可以找到许多工作示例。曾经有过这样的经历,认为在一个容器中运行所有内容更容易,但事实并非如此。好的,我会试试。谢谢你的建议。