Контейнер PHP Docker выходит без причины - PullRequest
0 голосов
/ 08 февраля 2019

Я относительно новичок в docker и docker-compose, поэтому я создал этот файл

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8050:80"
    volumes:
      - ./code:/code
      - ./site.conf:/etc/nginx/conf.d/default.conf
    links:
      - php
  php:
    image: php:7.3-fpm-alpine3.9
    command: apk --update add php7-mysqli
    volumes:
      - ./code:/code
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

По какой-то причине строка

command: apk --update add php7-mysqli

Останавливает php-контейнер без причины, простоprints dock_php_1 exited with code 0

Таким образом, мой веб-контейнер также останавливается, и служба не работает

В чем может заключаться проблема и как ее исправить?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Я полагаю, что вам действительно нужно использовать опцию «сборки» Docker Compose и предоставить Dockerfile, который устанавливает желаемый пакет (RUN apk --update add php7-mysqli).В качестве альтернативы вы можете создать новый образ Docker и использовать его непосредственно в файле Docker Compose.

Команда Docker Compose «команда» предназначена для переопределения стандартной команды образа Docker (команда CMD в Dockerfile)

Более подробное объяснение можно найти здесь: https://medium.freecodecamp.org/docker-entrypoint-cmd-dockerfile-best-practices-abc591c30e21

0 голосов
/ 08 февраля 2019

Это потому, что вы говорите контейнеру, чтобы он запускал команду apk update при запуске, он завершается и завершается с действительным кодом выхода 0 ...

Чтобы заставить его выполнить эту команду apk update ипо-прежнему используйте контейнер php, вам нужно расширить образ php своей собственной сборкой, чтобы создать собственное «собственное изображение» базового изображения php (вроде как расширение класса PHP), а затем запустить это обновление apk как часть файла dockerfile..

Это достаточно просто сделать, и ваш файл Docker будет выглядеть примерно так:

FROM php:7.3-fpm-alpine3.9

RUN apk --update add php7-mysqli

Вы можете сохранить это как ./php/Dockerfile

Затем обновите docker-compose.ymlфайл, чтобы сказать:

...
php:
  build: ./php
  volumes:
...

Удаление команды: section

Это тогда, после docker-compose up, построит ваш расширенный образ с обновлением apk внутри него какдополнительный слой на контейнере и продолжайте выполнение стандартной команды php, которую предоставляет исходное изображение.

Вот документация по директиве build:, так как есть довольно много других интересных вещей.Ngs, которые вы можете сделать с этим, например, указав Dockerfile, если вы не хотите помещать его в подкаталог, и предоставив context:, если вы хотите запекать файлы для вашего нового образа https://docs.docker.com/compose/compose-file/#build

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...