Estou usando docker-compose e v3. Estou tentando montar um volume no docker:
./appdata:/appdata
Eu gostaria de ter isso como um volume e, em seguida, fazer referência a esse volume de vários recipientes. A referência de configuração do volume é exibida apenas data-volume:
como um volume nomeado, sem nenhum valor, portanto, não se parece com o acima.
services:
nginx:
build: ./nginx/
ports:
- 80:80
links:
- php
volumes:
- app-volume
php:
build: ./php/
expose:
- 9000
volumes:
- app-volume
volumes:
app-volume: ./appdata:/appdata
Isso me dá:
ERRO: No arquivo './docker-compose.yml', o volume 'app-volume' deve ser um mapeamento, não uma string.
Obviamente, sei que preciso alterar o volumes
par chave / valor, mas não tenho certeza de como alterar isso para que possa compartilhar um volume entre os serviços.
Eu também verifiquei, volumes_from
mas isso efetivamente apenas permite a herança de outros contêineres. Eu vi alguém usar volumes_from
em outro contêiner que contém o mapeamento que eles querem, mas com command: true
definido para que o contêiner nunca seja realmente executado, o que para mim parece um hack.
Como posso fazer isso?
Note, eu não tenho o seguinte trabalho:
nginx:
volumes:
- ./appdata:/appdata
php:
volumes:
- ./appdata:/appdata
Mas isso é apenas duplicação e é algo que espero que um volume nomeado possa me ajudar a evitar :-)
fonte
Respostas:
Os volumes nomeados podem ser compartilhados entre contêineres da seguinte maneira:
Aqui está um exemplo de configuração que uso para melhor compreensão. Estou expondo os arquivos estáticos gerados do meu
web
contêiner a um volume nomeado chamadostatic-content
que é então lido e servido pelonginx
contêiner:fonte
static_content
no sistema de arquivos do host?app-volume: location_in_the_container
está errado./usr/src/app
nonginx
container e/usr/src/app/public
noweb
container ambos tivessem conteúdo original, qual será usado e por quê?collectstatic
em um contêiner e deseja que os resultados estejam disponíveis em outro, mas não se preocupa com a pasta do hostIsso resolve sem usar volumes nomeados:
Então, parece:
fonte
./appdata
, é isso que estou tentando fazer. Deixe esta resposta aqui :) +1Os volumes nomeados do docker foram removidos a partir da versão docker-compose 3.
No entanto, você pode usar campos de extensão para evitar a duplicação da fonte de volumes e evitar erros de digitação futuros:
NOTA: Esse recurso está disponível a partir do formato de arquivo da versão 3.4.
fonte
volumes
campo de nível superior , parecem ainda ser uma coisa na v3 dedocker-compose
.