I have a problem with Docker (docker-compose). I want to install some PHP extensions using docker-compose.yml
, but I am unable to do this, because my .yml has FROM ubuntu
and not FROM php
. Is there any way I can achieve or access the docker-php-ext-install
?
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"]
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
You need to create new Dockerfile for specific service, in this case 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
And then link to it in your docker-compose.yml
file, just like this:
services:
// other services
php:
build: ./php
ports:
- "9000:9000"
volumes:
- .:/dogopic
links:
- mariadb
Please look at build
parameter - it points to directory in which is that new Dockerfile located.
I walked around the problem. I've figured out that I can still run this docker-php-ext-install
script using following command:
docker-compose exec <your-php-container> docker-php-ext-install pdo pdo_mysql mbstring
And because of the convenience I've created this simple Batch file to simplify composing containers just to one command: ./docker.bat
@ECHO OFF
docker-compose build
docker-compose exec php docker-php-ext-install pdo pdo_mysql mbstring
docker-compose up