Docker-Compose con múltiples servicios

103

ESTA ES UNA PREGUNTA DE MUESTRA! NUNCA LO HAGA EN PRODUCCIÓN. ¡EJECUTE NGINX / PHP / OTROS SERVICIOS EN CONTENEDORES SEPARADOS!

Cuando inicio, docker-compose upel contenedor de Ubuntu sale con ubuntu exited with code 0.

Cuando corro docker run -d -ti -p 80:80 -v ~/sph/laravel52:/www/laravel ubuntu, todo funciona bien.

¿Cómo puedo replicar este comportamiento usando Docker Compose?

Este es mi 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

Y docker-compose.yml:

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"
Tim Devlet
fuente
Entiendo que puede hacer esto a propósito ENTRYPOINT nginx && service php5-fpm start && /bin/bash. Pero si no comprende las implicaciones de esa decisión, puede leer el siguiente github.com/phusion/baseimage-docker
Daniel Stefaniuk
Img nombre. Mi error. Ubuntu
Tim Devlet

Respuestas:

236

La cuestión es que está utilizando la opción -tcuando ejecuta su contenedor.

¿Podría verificar si al habilitar la ttyopción (ver referencia ) en su archivo docker-compose.yml, el contenedor sigue ejecutándose?

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"
        tty: true
JesúsTinoco
fuente
4
¿Recibió un mensaje de error: ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.después de agregar tty: true?
Inviernos
1
tty funciona porque crea una pseudo terminal. Tuve un problema similar con el contenedor SQL Server 2017. Funcionaba bien en modo independiente, pero salía en el modo docker-compose para escenarios de contenedores múltiples. Esto es lo que hice con tty para arreglarlo handsonarchitect.com/2018/01/…
Nilesh Gule
@NileshGule gracias por su tiempo para explicar por qué funciona tty, sin embargo, me gustaría saber un poco más, si no le importa. ¿Cómo evitará exactamente la creación de un pseudo terminal salir? Gracias de nuevo.
Luis Milanese
3
@LuisMilanese generalmente cuando el proceso de primer plano se completa dentro del contenedor de la ventana acoplable, asume que el trabajo está completo y limpia la instancia del contenedor. Pero cosas como el motor de base de datos y los servidores web deben seguir funcionando. Al crear una pseudo terminal, el contenedor permanece vivo. Puede ver este flujo de trabajo ejecutando el comando docker logs << nombre del contenedor >> con y sin tty
Nilesh Gule
tty no me funciona ... estoy usando la versión "3" de docker-compose
Sanjay Salunkhe