运行 `docker-php-ext-install` 来自 php 以外的容器
Run `docker-php-ext-install` FROM container other than php
我对 Docker (docker-compose) 有疑问。我想使用 docker-compose.yml
安装一些 PHP 扩展,但我无法这样做,因为我的 .yml 有 FROM ubuntu
而不是 FROM php
。有什么方法可以实现或访问 docker-php-ext-install
?
Docker文件
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"]
docker-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
docker-php-ext-install
不是一些原生的 docker 功能。如果您仔细阅读 php docker hub 页面,您会发现,它只是为了简化安装过程而提供的脚本:
We provide the helper scripts docker-php-ext-configure
, docker-php-ext-install
, and docker-php-ext-enable
to more easily install PHP extensions.
如果您的图像基于 ubuntu
,而不是 php
,您可能会发现 docker-php-ext-install
,例如 github。
但是因为你的 Dockerfile
是 FROM ubuntu
,我建议你安装 php 和 apt-get
:
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-fpm
和 nginx
:
php-fpm -D
nginx -g "daemon off;"
并且在 Dockerfile
我 运行 脚本中。不是 nginx
:
COPY start.sh /tmp/start.sh
CMD ["/tmp/start.sh"]
新解决方案
您需要为特定服务创建新的 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
然后 link 到你的 docker-compose.yml
文件中,就像这样:
services:
// other services
php:
build: ./php
ports:
- "9000:9000"
volumes:
- .:/dogopic
links:
- mariadb
请查看 build
参数 - 它指向新 Dockerfile 所在的目录。
旧解
我绕过了这个问题。我发现我仍然可以使用以下命令 运行 这个 docker-php-ext-install
脚本:
docker-compose exec <your-php-container> docker-php-ext-install pdo pdo_mysql mbstring
为了方便起见,我创建了这个简单的批处理文件来简化将容器组合成一个命令的过程:./docker.bat
@ECHO OFF
docker-compose build
docker-compose exec php docker-php-ext-install pdo pdo_mysql mbstring
docker-compose up
我对 Docker (docker-compose) 有疑问。我想使用 docker-compose.yml
安装一些 PHP 扩展,但我无法这样做,因为我的 .yml 有 FROM ubuntu
而不是 FROM php
。有什么方法可以实现或访问 docker-php-ext-install
?
Docker文件
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"]
docker-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
docker-php-ext-install
不是一些原生的 docker 功能。如果您仔细阅读 php docker hub 页面,您会发现,它只是为了简化安装过程而提供的脚本:
We provide the helper scripts
docker-php-ext-configure
,docker-php-ext-install
, anddocker-php-ext-enable
to more easily install PHP extensions.
如果您的图像基于 ubuntu
,而不是 php
,您可能会发现 docker-php-ext-install
,例如 github。
但是因为你的 Dockerfile
是 FROM ubuntu
,我建议你安装 php 和 apt-get
:
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-fpm
和 nginx
:
php-fpm -D
nginx -g "daemon off;"
并且在 Dockerfile
我 运行 脚本中。不是 nginx
:
COPY start.sh /tmp/start.sh
CMD ["/tmp/start.sh"]
新解决方案
您需要为特定服务创建新的 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
然后 link 到你的 docker-compose.yml
文件中,就像这样:
services:
// other services
php:
build: ./php
ports:
- "9000:9000"
volumes:
- .:/dogopic
links:
- mariadb
请查看 build
参数 - 它指向新 Dockerfile 所在的目录。
旧解
我绕过了这个问题。我发现我仍然可以使用以下命令 运行 这个 docker-php-ext-install
脚本:
docker-compose exec <your-php-container> docker-php-ext-install pdo pdo_mysql mbstring
为了方便起见,我创建了这个简单的批处理文件来简化将容器组合成一个命令的过程:./docker.bat
@ECHO OFF
docker-compose build
docker-compose exec php docker-php-ext-install pdo pdo_mysql mbstring
docker-compose up