Состояние Docker-контейнера, запущенного Docker-compose, всегда прекращается - PullRequest
1 голос
/ 28 июня 2019

Вот мой docker-compose.yml:

version: "3"

services:
  test123:
    build: .
    container_name: "test123"

Мой Dockerfile:

FROM alpine:3.9

CMD ["/bin/sh"]

Когда я запускаю:

docker run -it alpine:3.9 

Работает нормально.Но когда я запускаю из docker-compose:

docker-compose up -d

Состояние контейнера всегда: Exited (0)

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 28 июня 2019

Ваш контейнер запускается и выходит немедленно, потому что /bin/sh останавливается.Вот как работают контейнеры.Когда их PID 1 останавливается, они выходят.Таким образом, чтобы предотвратить выход sh, вы должны использовать:

    tty: true
    stdin_open: true

Эти параметры эквивалентны -it, которые вы уже используете в своей команде docker run ....

из документов :

--tty , -t                Allocate a pseudo-TTY
--interactive , -i        Keep STDIN open even if not attached

Обновлен docker-compose.yml файл:

version: "3"

services:
  test123:
    build: .
    container_name: "test123"
    tty: true
    stdin_open: true
0 голосов
/ 28 июня 2019

Не удивительно, что ваш контейнер выходит (со статусом 0, что означает success). Контейнер должен продолжать работать, чтобы остаться в живых, поэтому выполняемая команда никогда не должна заканчиваться. Вот обходной путь:

Dockerfile:

FROM alpine:3.9

CMD ["tail", "-f", "/dev/null"]

Таким образом, контейнер всегда будет занят, пока вы его не остановите.

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