运行`docker-php-ext-install`从PHP以外的容器

我有一个Docker(docker-compose)的问题。 我想使用docker-compose.yml来安装一些PHP扩展,但是我无法做到这一点,因为我的.yml有FROM ubuntu而不是FROM php 。 有什么办法可以实现或访问docker-php-ext-install

Dockerfile

 FROM ubuntu:16.04 RUN apt -yqq update RUN apt -yqq install nginx iputils-ping RUN docker-php-ext-install pdo pdo_mysql mbstring WORKDIR /usr/local/src COPY docker/nginx/dev.conf /etc/nginx/conf.d/dev.conf COPY docker/nginx/nginx.conf /etc/nginx/nginx.conf CMD ["nginx"] 

泊坞窗,compose.yml

 version: "2" services: mariadb: image: mariadb environment: - MYSQL_ALLOW_EMPTY_PASSWORD=1 - MYSQL_ROOT_PASSWORD= phpmyadmin: image: phpmyadmin/phpmyadmin ports: - "8080:80" restart: always environment: - PMA_HOST=mariadb links: - mariadb php: image: php:7.1.1-fpm ports: - "9000:9000" volumes: - .:/dogopic links: - mariadb nginx: build: . ports: - "8000:80" volumes: - .:/dogopic links: - php 

控制台输出(片段)

 Step 5/9 : RUN docker-php-ext-install pdo pdo_mysql mbstring ---> Running in 445f8c82883d /bin/sh: 1: docker-php-ext-install: not found 

新解决scheme

经过4个月的深入研究,经过无数个不眠之夜的学习Dockerfiles的数小时之后,终于find了正确的答案

你所要做的就是为特定的服务创build新的Dockerfile,在这种情况下, php

php/Dockerfile

 FROM php:7.1.1-fpm RUN apt -yqq update RUN apt -yqq install libxml2-dev RUN docker-php-ext-install pdo_mysql RUN docker-php-ext-install xml 

然后在docker-compose.yml文件中链接到它,就像这样:

 services: // other services php: build: ./php ports: - "9000:9000" volumes: - .:/dogopic links: - mariadb 

请看build参数 – 它指向新Dockerfile所在的目录。

旧解决scheme

我绕过这个问题。 我已经想通了,我仍然可以使用以下命令运行这个docker-php-ext-install脚本:

 docker-compose exec <your-php-container> docker-php-ext-install pdo pdo_mysql mbstring 

由于方便,我创build了这个简单的batch file,以简化组成容器只需一个命令: ./docker.bat

 @ECHO OFF docker-compose build docker-compose exec php docker-php-ext-install pdo pdo_mysql mbstring docker-compose up 

docker-php-ext-install不是一些本地的dockerfunction。 如果你仔细阅读php docker hub页面,你会发现,这只是一个脚本,使安装过程变得简单:

我们提供了帮助程序脚本docker-php-ext-configuredocker-php-ext-installdocker-php-ext-enable以便更轻松地安装PHP扩展。

如果你的图像是基于ubuntu而不是php ,你可能会在github上finddocker-php-ext-install

但是由于你的DockerfileFROM ubuntu ,所以我build议你用apt-get安装php:

 FROM ubuntu:16.04 RUN apt -yqq update RUN apt -yqq install nginx iputils-ping RUN apt-get install -y php php-fpm pdo-mysql php-mbstring 

不要忘记设置nginx来使用php-fpm。 为此,我亲自使用start.sh脚本,该脚本在容器中启动php-fpmnginx

 php-fpm -D nginx -g "daemon off;" 

Dockerfile运行脚本。 不是nginx

 COPY start.sh /tmp/start.sh CMD ["/tmp/start.sh"]