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. Но если вы не понимаете смысла этого решения, вы можете прочитать следующее: github.com/phusion/baseimage-docker
Daniel Stefaniuk
Имя изображения. Моя ошибка. 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/…
Nilesh Gule
@NileshGule, спасибо, что уделили время, чтобы объяснить, почему работает tty, однако я хотел бы узнать немного больше, если вы не возражаете. Как именно создание псевдотерминала предотвратит выход? Еще раз спасибо.
Луис Миланезе
3
@LuisMilanese обычно, когда процесс переднего плана завершается в контейнере докера, он предполагает, что задание завершено, и очищает экземпляр контейнера. Но такие вещи, как ядро ​​базы данных и веб-серверы, должны продолжать работать. Создав псевдотерминал, контейнер остается живым. Вы можете увидеть этот рабочий процесс, выполнив команду docker logs << имя контейнера >> с tty и без него
Nilesh Gule
tty у меня не работает .. я использую версию "3" программы docker-compose
Санджай Салунхе