Montando vários volumes em um contêiner de docker?


151

Eu sei que posso montar um diretório no meu host no meu contêiner usando algo como

docker run -t -i -v '/on/my/host:/on/the/container' ubuntu /bin/bash

Existe uma maneira de criar mais de um par host-contêiner? por exemplo, uma lista separada por vírgula ou passa em uma matriz?


como eu entendo os termos do estado atual dos documentos, você não pode montar um volume (título da pergunta), certamente pode ter muitas montagens de ligação para pastas de host (isso é o que é solicitado no corpo da pergunta)
Alexei Martianov

Respostas:


259

Passar múltiplos -vargumentos.

Por exemplo:

docker -v /on/my/host/1:/on/the/container/1 \
       -v /on/my/host/2:/on/the/container/2 \
       ...

2
Ok, estou fazendo exatamente da mesma maneira, mas quando tento chamar o segundo, ele diz que não foi encontrado.
momal

docker run -v / home / usr / espaço de trabalho / proj / WebContent / arquivo / nome de usuário: / mycode -v / home / usr / espaço de trabalho / proj / WebContent / arquivo: / tst gcc: 4.9 sh -c 'cd mycode; gcc -o myapp ./mycode.c; cd tst; ./myapp <./test.txt 'Este é o meu comando, estou tentando compilar o mycode.c que está no primeiro volume, mas atribui ao mesmo arquivo um stdin de um volume diferente. Como eu faço isso?
momal 23/03

1
@YehCheez, eu (fortemente) sugiro abrir isso como uma pergunta separada e tentar criar um reprodutor. (Se você pudesse reproduzir novamente o bug com uma imagem do Docker no registro público e criar todas as dependências locais no script fornecido na pergunta, isso seria o ideal).
Charles Duffy

Sempre precisa de caminhos absolutos?
precisa saber é o seguinte

3
O destino deve sempre ser absoluto. A fonte precisa ser um caminho absoluto ou o identificador de um volume nomeado - consulte docs.docker.com/engine/admin/volumes/volumes para obter documentos sobre este último.
Charles Duffy

19

O Docker agora recomenda migrar para o uso --mount.

Vários suportes de volume também são explicados em detalhes na documentação atual do Docker.

De: https://docs.docker.com/storage/bind-mounts/

$ docker run -d \
  -it \
  --name devtest \
  --mount type=bind,source="$(pwd)"/target,target=/app \
  --mount type=bind,source="$(pwd)"/target,target=/app2,readonly,bind-propagation=rslave \
  nginx:latest

A resposta mais antiga original ainda deve funcionar; apenas tentando manter a resposta alinhada com o método atual mais conhecido.


Vale a pena adicionar o único motivo pelo qual o Docker recomenda a migração é porque a pesquisa deles mostra que - o mount é mais fácil de usar e tem mais opções. Usar -v ou --mount é perfeitamente adequado, isso depende de suas preferências e necessidades pessoais.
KillerKode #


6

Você pode ter somente leitura ou somente leitura e gravação no volume

docker -v /on/my/host/1:/on/the/container/1:ro \

docker -v /on/my/host/2:/on/the/container/2:rw \

1
qual é a opção padrão?
Hammad Dar

-9

Ou você pode fazer

docker run -v /var/volume1 -v /var/volume2 DATA busybox true

4
Não é disso que o OP está atrás. Isso cria um volume dentro do contêiner e não o vincula ao host.
Ioannis

8
Você está certo, deve ser: estivador prazo -v / var / volume1: Recipiente / / volume1 -v / var / Volume2: Recipiente / / Volume2 DATA BusyBox verdade
Joost van der Laan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.