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?

Seldo
fonte
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 \
       ...
Charles Duffy
fonte
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.

MadJangi
fonte
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 #
18

Você pode usar a -vopção várias vezes no docker runcomando para montar vários diretórios no contêiner:

docker run -t -i \
  -v '/on/my/host/test1:/on/the/container/test1' \
  -v '/on/my/host/test2:/on/the/container/test2' \
  ubuntu /bin/bash
Gaurav Sehgal
fonte
1
Isso adiciona algo à resposta anterior para o mesmo efeito ?
Charles Duffy
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 \
senthil sivasamy
fonte
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
Joost van der Laan
fonte
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