Docker-Compose com vários serviços

103

ESTA É UMA EXEMPLO DE PERGUNTA! NUNCA FAÇA NA PRODUÇÃO. EXECUTE NGINX / PHP / OUTROS SERVIÇOS EM CONTÊINERES SEPARADOS!

Quando eu inicio, docker-compose upo contêiner do Ubuntu é encerrado com ubuntu exited with code 0.

Quando corro docker run -d -ti -p 80:80 -v ~/sph/laravel52:/www/laravel ubuntu, tudo funciona bem.

Como posso replicar esse comportamento usando o Docker Compose?

Este é o meu 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

E docker-compose.yml:

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"
Tim Devlet
fonte
Eu entendo que você pode fazer isso de propósito ENTRYPOINT nginx && service php5-fpm start && /bin/bash. Mas se você não entende a implicação dessa decisão, pode ler o seguinte github.com/phusion/baseimage-docker
Daniel Stefaniuk
Nome do Img. Erro meu. Ubuntu
Tim Devlet

Respostas:

236

O fato é que você está usando a opção -tao executar seu contêiner.

Você poderia verificar se a ativação da ttyopção (consulte a referência ) no arquivo docker-compose.yml o contêiner continua em execução?

version: '2'
services:
  ubuntu:
        build: .
        container_name: ubuntu
        volumes:
            - ~/sph/laravel52:/www/laravel
        ports:
          - "80:80"
        tty: true
JesusTinoco
fonte
4
Você recebeu uma mensagem de erro: ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.depois de adicionar tty: true?
Winters,
1
tty funciona porque cria um pseudo terminal. Tive um problema semelhante com o contêiner do SQL Server 2017. Ele estava funcionando bem no modo autônomo, mas estava saindo do modo docker-compose para o cenário de vários contêineres. Aqui está o que eu fiz com o tty para corrigi-lo handsonarchitect.com/2018/01/…
Nilesh Gule
@NileshGule obrigado pelo seu tempo em explicar por que o tty funciona, no entanto, gostaria de saber um pouco mais, se você não se importa. Como exatamente a criação de um pseudoterminal impedirá a saída? Obrigado novamente.
Luis Milanese
3
@LuisMilanese geralmente quando o processo de primeiro plano é concluído dentro do contêiner do docker, ele assume que o trabalho foi concluído e limpa a instância do contêiner. Mas coisas como mecanismo de banco de dados e servidores da web precisam continuar em execução. Ao criar um pseudoterminal, o contêiner permanece ativo. Você pode ver esse fluxo de trabalho executando o comando docker logs << nome do contêiner >> com e sem tty
Nilesh Gule
tty não está funcionando para mim .. estou usando a versão "3" do docker-compose
Sanjay Salunkhe