Docker - Não é possível compartilhar dados entre contêineres em um volume (composição do docker 3)
Por enquanto, tenho alguns contêineres para um aplicativo Web (nginx, gunicorn, postgres e node para criar arquivos estáticos a partir da fonte e uma renderização do lado do servidor React). Em um Dockerfile para o contêiner do nó, tenho duas etapas: criar e executar (Dockerfile.node) Termina com dois diretórios dentro de um contêiner:bundle_client
- é estático para um nginx ebundle_server
- usado no próprio contêiner do nó para iniciar um servidor expresso.
Então, preciso compartilhar uma pasta estática criada (bundle_client
) com o contêiner nginx. Para fazê-lo de acordo com a referência docker-compose no meudocker-compose.yml
Eu tenho os seguintes serviços (consulte adocker-compose.yml):
node:
volumes:
- vnode:/usr/src
nginx:
volumes:
- vnode:/var/www/tg/static
depends_on:
- node
e volumes:
volumes:
vnode:
Corridadocker-compose build
termina sem erros. Corridadocker-compose up
corre tudo ok e eu posso abrirlocalhost:80
e há nginx, gunicorn e SSR express de nó, todos funcionando muito bem e posso ver uma página da web, mas todos os arquivos estáticos retornam erro 404 não encontrado.
Se eu verificar volumes comdocker volume ls
Eu posso ver dois volumes recém-criados chamadostg_vnode
(que consideramos aqui) etg_vdata
(consulte docker-compose.yml completo)
Se eu for para um contêiner nginx comdocker run -ti -v /tmp:/tmp tg_node /bin/bash
Não consigo ver meuwww/tg/static
pasta que deve mapear meus arquivos estáticos do volume do nó. Também tentei criar um vazio/var/www/tg/static
pasta com contêiner nginxDockerfile.nginx
mas permanece vazio.
Se eu mapear umbundle_client
pasta da máquina host no diretóriodocker-compose.yml
em umnginx.volumes
seção como- ./client/bundle_client:/var/www/tg/static
funciona bem e eu posso ver todos os arquivos estáticos servidos com nginx no navegador.
O que estou fazendo de errado e como fazer com que meu contêiner compartilhe conteúdo estático incorporado com o contêiner nginx?
PS: Eu li todos os documentos, todos os problemas do github e perguntas e respostas sobre o stackoverflow e, como eu entendi, tem que funcionar e não há informações sobre o que fazer quando não funciona.
UPD: Resultado dedocker volume inspect vnode
:
[
{
"CreatedAt": "2018-05-18T12:24:38Z",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "tg",
"com.docker.compose.version": "1.21.1",
"com.docker.compose.volume": "vnode"
},
"Mountpoint": "/var/lib/docker/volumes/tg_vnode/_data",
"Name": "tg_vnode",
"Options": null,
"Scope": "local"
}
]
Arquivos:Dockerfile.node, docker-compose.yml
Arquivo de encaixe Nginx:Dockerfile.nginx
UPD: Criei um repositório simplificado para reproduzir uma pergunta:repo (existem alguns avisos emnpm install
esqueça, ele instala e constrói ok). Eventualmente, quando abrimoslocalhost:80
vemos uma página vazia e 404 mensagens para arquivos estáticos (vendor.js
eapp.js
) nas ferramentas de desenvolvimento do Chrome, mas deve haver uma mensagemReact app: static loaded
gerado pelo script de reação.