web-dev-qa-db-ja.com

php以外のコンテナから `docker-php-ext-install`を実行します

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"]

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
15
Albert221

新しいソリューション

特定のサービス、この場合はphpの新しいDockerfileを作成する必要があります。

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

そして、linkdocker-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

利便性のために、この単純なバッチファイルを作成して、コンテナの構成を1つのコマンドに単純化しています:./docker.bat

@ECHO OFF

docker-compose build
docker-compose exec php docker-php-ext-install pdo pdo_mysql mbstring
docker-compose up
23
Albert221

docker-php-ext-installは、一部のネイティブdocker機能ではありません。 php docker hub pageを注意深く読むと、インストールプロセスを簡単にするために提供されている単なるスクリプトであることがわかります。

PHP拡張機能をより簡単にインストールするために、ヘルパースクリプトdocker-php-ext-configuredocker-php-ext-install、およびdocker-php-ext-enable]を提供しています。

イメージがubuntuではなくphpに基づいている場合、たとえば、 githubdocker-php-ext-installがあります。

ただし、DockerfileFROM ubuntuなので、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

Php-fpmを使用するようにnginxを設定することを忘れないでください。そのために、私は個人的にstart.shスクリプトを使用します。このスクリプトは、コンテナでphp-fpmnginxを開始します。

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

そして、Dockerfileでスクリプトを実行します。 nginxではありません:

COPY start.sh /tmp/start.sh
CMD ["/tmp/start.sh"]
9
Alex Karshin