Docker-Compose з кількома послугами


103

ЦЕ ЗРАЗОПИТАННЯ ПИТАННЯ! НІКОЛИ НЕ РОБИТИ В ПРОИЗВОДСТВІ РАБИТИ NGINX / PHP / ІНШІ ПОСЛУГИ В ОДНОВИХ КОНТЕНЕРАХ!

Коли я запускаю, docker-compose upконтейнер Ubuntu закінчується ubuntu exited with code 0.

Коли я бігаю docker run -d -ti -p 80:80 -v ~/sph/laravel52:/www/laravel ubuntu, все працює добре.

Як я можу повторити цю поведінку за допомогою Docker Compose?

Це моє Dockerfile:

# Version: 0.0.1
FROM ubuntu:15.04



ENV DEBIAN_FRONTEND noninteractive

#INSTALL ALL
RUN apt-get update && apt-get install -y  \
       nano \
       php5-fpm \
       php5-mysql \
       nginx



#NGINX CONF
ADD nginx/sites-available/laravel.conf /etc/nginx/sites-available/
RUN rm /etc/nginx/sites-available/default
RUN mv /etc/nginx/sites-available/laravel.conf /etc/nginx/sites-available/default

VOLUME /www


ENTRYPOINT nginx && service php5-fpm start && /bin/bash

CMD ["true"]


EXPOSE 80

І docker-compose.yml:

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"

Я розумію, ви можете це зробити спеціально ENTRYPOINT nginx && service php5-fpm start && /bin/bash. Але якщо ви не розумієте сенсу
Даніель Стефанюк

Ім’я імг. Моя помилка. Ubuntu
Тім Девлет

Відповіді:


236

Вся справа в тому, що ви використовуєте цю опцію -tпід час запуску контейнера.

Чи можете ви перевірити, чи включена ttyопція (див. Посилання ) у вашому файлі docker-compose.yml контейнер продовжує працювати?

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"
        tty: true

4
Ви отримали повідомлення про помилку: ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.після додавання tty: true?
Зими

1
tty працює, оскільки створює псевдотермінал. У мене була аналогічна проблема з контейнером SQL Server 2017. Він працював нормально в автономному режимі, але виходив у режимі докер-композиції для багатоконтейнерного сценарію. Ось що я зробив з tty, щоб виправити це handsonarchitect.com/2018/01/…
Нілеш Гуле

@NileshGule дякую за ваш час, щоб пояснити, чому працює tty, однак я хотів би дізнатися трохи більше, якщо ви не заперечуєте. Як саме створення псевдотерміналу запобігає виходу? Знову дякую.
Луїс

3
@LuisMilanese зазвичай, коли процес переднього плану завершується в контейнері docker, він передбачає, що завдання виконано, і очищає екземпляр контейнера. Але такі речі, як двигун бази даних та веб-сервери, потрібно продовжувати працювати. Створюючи псевдотермінал, контейнер залишається живим. Ви можете побачити цей робочий процес, запустивши журнали docker << ім'я контейнера >> з та без tty
Nilesh

tty не працює для мене .. я використовую версію "3" докер-композиту
Sanjay Salunkhe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.