Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在docker-compose.yml中运行php fpm?_Docker_Docker Compose - Fatal编程技术网

如何在docker-compose.yml中运行php fpm?

如何在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

我试图用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 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
    
    来自php:7.2-fpm
    运行docker php ext安装pdo pdo_mysql mbstring
    
    docker-compose.yml:
    
    版本:“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上可以找到许多工作示例。曾经有过这样的经历,认为在一个容器中运行所有内容更容易,但事实并非如此。好的,我会试试。谢谢你的建议。