Запустите `docker-php-ext-install` из контейнера, отличного от php
У меня проблема с Docker (docker-compose). Я хочу установить некоторые расширения PHP, используя docker-compose.yml
, но я не могу этого сделать, потому что мой .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
Ответы
Ответ 1
Новое решение
Вам нужно создать новый 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.
Старое решение
Я обошел проблему. Я понял, что все еще могу запустить этот скрипт 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
Ответ 2
docker-php-ext-install
не является некоторой нативной функциональностью docker. Если вы внимательно прочитаете страницу php docker hub, то увидите, что это всего лишь сценарий, облегчающий процесс установки:
Мы предоставляем вспомогательные сценарии docker-php-ext-configure
, docker-php-ext-install
и docker-php-ext-enable
для упрощения установки расширений PHP.
Если ваш образ основан на 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"]
Ответ 3
У меня та же проблема. Я получаю сообщение:
docker-php-ext-configure: not found
У меня есть этот файл в моем контейнере php.
Не знаю, почему это не работает!