Tenho um ambiente de desenvolvimento que estou encaixando e gostaria de poder carregar minhas alterações sem ter que reconstruir as imagens da janela de encaixe. Estou usando docker compose porque redis é uma das dependências do meu aplicativo e gosto de poder vincular um contêiner de redis
Tenho dois contêineres definidos em meu docker-compose.yml
:
node:
build: ./node
links:
- redis
ports:
- "8080"
env_file:
- node-app.env
redis:
image: redis
ports:
- "6379"
Cheguei ao ponto no node
dockerfile do meu aplicativo em que adiciono um volume, mas como faço para montar o diretório do host no volume para que todas as minhas edições ao vivo no código sejam refletidas no contêiner?
Este é meu Dockerfile atual:
# Set the base image to Ubuntu
FROM node:boron
# File Author / Maintainer
MAINTAINER Amin Shah Gilani <[email protected]>
# Install nodemon
RUN npm install -g nodemon
# Add a /app volume
VOLUME ["/app"]
# TODO: link the current . to /app
# Define working directory
WORKDIR /app
# Run npm install
RUN npm install
# Expose port
EXPOSE 8080
# Run app using nodemon
CMD ["nodemon", "/app/app.js"]
Meu projeto é assim:
/
- docker-compose.yml
- node-app.env
- node/
- app.js
- Dockerfile.js
docker
docker-compose
docker-volume
Amin Shah Gilani
fonte
fonte
Error: Cannot find module '/data/app.js'
/app/
que seu CMD está apontando para/data
Error: Cannot find module 'express'
, vou tentar algumas coisas agora.- .:c:/app
(isso me tropeçou)Existem algumas opções
Sintaxe curta
Usando o
host : guest
formato, você pode fazer o seguinte:Sintaxe longa
No docker-compose v3.2, você pode usar a sintaxe longa, que permite a configuração de campos adicionais que podem ser expressos na forma abreviada, como
mount type
(volume, bind ou tmpfs) eread_only
.Confira https://docs.docker.com/compose/compose-file/#long-syntax-3 para mais informações.
fonte
Se desejar montar um diretório de host específico (
/disk1/prometheus-data
no exemplo a seguir) como um volume navolumes
seção do arquivo YAML do Docker Compose, você pode fazer como a seguir, por exemplo:A propósito, no Dockerfile de prometheus, você pode encontrar as
VOLUME
instruções abaixo, que marcam como retendo volumes montados externamente do host nativo, etc. (Nota, entretanto: esta instrução não é obrigatória para montar um volume em um contêiner.) :Dockerfile
Refs:
fonte
local
tipo de driver?local
driver_opts: o: bind type: none
?local
driver embutido no Linux aceita opções semelhantes ao comando linux mount: man7.org/linux/man-pages/man8/mount.8.html . Você pode encontrar mais discussão em github.com/moby/moby/issues/19990#issuecomment-248955005 e stackoverflow.com/questions/35841241/…Foram duas coisas:
Eu adicionei o volume em
docker-compose.yml
:Mudei as
npm install && nodemon app.js
partes para umCMD
porqueRUN
adiciona coisas ao Union File System e meu volume não faz parte do UFS.fonte
temos que criar seu próprio volume do docker mapeado com o diretório do host antes de mencionar no docker-compose.yml como externo
1. Criar volume denominado compartilhamento
2. Use-o em seu docker-compose
Dessa forma, podemos compartilhar o mesmo diretório com muitos serviços em execução em diferentes contêineres
fonte