Solucionado (ver solução)
Solucionado
(ver solução)
10
respostas

Docker Compose não roda no Docker Toolbox?

Amigos, estou usando o Docker Toolbox no Mac, e criei um container PHP-Apache usando um dockerfile com apenas uma linha:

FROM php:7.0-apache

Rodando com docker run, funciona perfeitamente. Porém, quando uso o compose:

php: build: . ports: - "80:80" - "443:443" volumes: - .:/var/www/html container_name: patterns-app

O container sobe e imediatamente fecha (exit code 0). Se eu incluir o parâmetro tty: true no yml o container continua ativo, mas mesmo assim não consigo acessar a aplicação no browser. Alguém pode me ajudar?

10 respostas

Ola,

Poderia por favor compartilhar o arquivo do Docker Compose para que possamos analisar?

Obrigado

Eu já tinha compartilhada na minha questão, mas não ficou claro porque saiu em uma linha. Aí vai de novo:

php:
  build: .
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - ".:/var/www/html"
  container_name: patterns-app
  tty: true

Fiz as seguintes alterações:

php:
  build: .
  ports:
    - "8080:80"
  volumes:
    - ".:/var/www/html"
  container_name: patterns-app

O Dockerfile do php-apache faz a exposição somente da porta 80, dessa forma, só conseguimos mapear essa porta para uma de nossa máquina local, no meu caso, não estava utilizando a porta local 8080 e com isso fiz esse mapeamento 8080:80.

Na hora de subir o container, podemos rodá-lo em plano de fundo (background), com o comando docker-compose up -d

Nesse momento se colocar o comando docker ps você deve ver o container rodando. Dentro do diretório mapedo para o var/www/htmlcoloquei um arquivo index.html e depois fui no browser e coloquei localhost:8080 e consegui visualizar a aplicação. Obs: Estou usando o Ubuntu, no Windows não funcionaria colocando localhost. Segue explicação detalhada das diferenças nesse gist: https://github.com/moby/moby/issues/15740 , o motivo seria basicamente porque o Docker Daemon não roda nativamente no Windows, rodando em um ambiente virtualizado e ao colocar no browser localhost estamos referenciando a máquina do Windows.

Ainda não deu certo, Rafael. Tentei rodar com o código que você fez, e o container não subiu. Acrescentei o parâmetro tty: true, e o container sobe, aparece no docker ps, mas ainda não fica acessível no browser.

Estou usando Mac, que pelo que vi no artigo que você indicou, nesse caso funciona como o Windows, ou seja, preciso acessar no browser o IP do container, e não localhost, mas eu já estava testando dessa forma.

Aliás, eu não entendi muito bem o tty: true. Encontrei essa solução no Google, mas não entendi o que faz, você poderia explicar, por gentileza?

Vamos tentar o seguinte, tente executar o código que passei acima em foreground, para isso poderia colocar docker-compose up, com isso, toda a saída vai aparecer no terminal. Aparece algum erro ao subir o container?

Se não aparecer, é porque o container deve ter subido com sucesso, com isso, tente abrir outro terminal (se fechar o terminal que rodou o docker-compose o container para) e colocar o comando docker ps, nesse momento tem que aparecer esse container patterns-app.

O tty: true seria parecido com o comando -t quando colocamos o docker run, quando colocamos tty: true estaremos fazendo o vínculo com o shell do container.

Um outra dúvida, se você roda por exemplo:

docker run -v [local index.html]:/var/www/html -d -p 8080:80 [nome da imagem php-apache]

Você consegue acessar a aplicação com localhost:8080? Pergunto porque fiz esse teste no Ubuntu e consigo visualizar o index.html que criei.

Quando rodo docker-composer up com o seu código, não mostra nenhuma saída no terminal e devolve o prompt, e o docker ps não mostra nenhum container rodando.

E usando o docker run o container sobe e fica acessível no browser, aliás já funcionava antes.

Só confirmando como está a estrutura do projeto que montei:

teste-alura/
├── docker-compose.yaml
└── Dockerfile

O arquivo docker-compose.yaml está assim:

php:
  build: .
  ports:
    - "8080:80"
  volumes:
    - "/home/rafael/index:/var/www/html"
  container_name: patterns-app

Dockerfile:

FROM php:7.0-apache

Na sequência, no terminal mudei para o diretório teste-alura e executei o comando docker-compose up. Nem assim aparece nada no terminal ao executar o docker-compose up? Obs: Só será necessário trocar o caminho index para o local com o arquivo na sua respectiva máquina.

Está idêntico ao teste que fiz, e que não deu certo. Vou pesquisar no Google, talvez seja alguma questão de versão. Grato pela ajuda!

solução!

Rafael, descobri o problema - ou pelo menos a solução! Usei

services:
  apache:

No lugar de php, e funcionou. Aparentemente, no meu caso, não estava subindo o Apache.

Oi Vini,

Legal, obrigado pelo retorno. Confesso que não sei o porque que ao alterar o nome do serviço, ele funcionou, vou pesquisar mais a respeito, mas com certeza será de grande ajuda para os demais alunos.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software