В док-контейнере должен быть запущен длительный процесс, определенный в CMD . php-cli это не то. Если вы запустите composer up
, вы увидите что-то вроде этого:
$ docker-compose up
Creating network "tempphpdocker_default" with the default driver
Pulling web (php:7.3-cli)...
7.3-cli: Pulling from library/php
b8f262c62ec6: Pull complete
a98660e7def6: Pull complete
4d75689ceb37: Pull complete
639eb0368afa: Pull complete
2cdbfdb779b1: Pull complete
e0b637fa9606: Pull complete
da7333b0ef25: Pull complete
01d65ff46009: Pull complete
673e50bed3b9: Pull complete
bf6c6e34305d: Pull complete
Digest: sha256:1453f5ef0d4d1d424ed8114dd90a775bdec06cc6fb3bbae9521dcb4ca0c8ca90
Status: Downloaded newer image for php:7.3-cli
Creating tempphpdocker_web_1 ...
Creating tempphpdocker_web_1 ... done
Attaching to tempphpdocker_web_1
web_1 | Interactive shell
web_1 |
tempphpdocker_web_1 exited with code 0
Код выхода равен 0. Это означает, что ваша команда в образе докера php:7.3-cli
успешно запущена и завершена.
Чтобы правильно докеризовать ваше приложение, вы должны переопределить это, записав свой собственный файл докера с соответствующими COPY вызовами, которые связывают вашу CLI-программу с ним. Ваш Dockerfile
, вероятно, должен выглядеть примерно так:
FROM php:7.3-cli
RUN mkdir -p /opt/workdir/bin
RUN mkdir -p /opt/workdir/vendor
COPY bin/ /opt/workdir/bin
COPY vendor/ /opt/workdir/vendor
WORKDIR /opt/workdir
CMD php ./bin/console COMMAND
Вы можете просто собрать и запустить этот Dockerfile
, или, если вы предпочитаете docker-compose
, вы можете определить docker-compose.yml
в той же папкекак Dockerfile:
version: "3.3"
services:
web:
image: php-custom
build: ./
Обратите внимание, что докеризованное приложение может получить доступ только к файлам и папкам в образе докера. Вы должны привязать тома вашей локальной файловой системы к контейнеру, прежде чем он действительно сможет работать в вашей файловой системе.