Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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.