Não foi possível encontrar o arquivo depois de adicionar no Docker

1

Estou tentando usar o ADD para copiar um arquivo compactado localmente no contêiner:

RUN mkdir /root/foo
ADD foo.zip /root/foo/
UNZIP -o /root/foo/foo.zip

Eu, então, construo e executo o container e entro no bash:

sudo docker run -it -p 8080:8080 tomcat bash

Quando entro no diretório / root / foo /, o diretório não é encontrado. O que devo fazer para criar o diretório no container e ver o conteúdo de foo.zip?

    
por ryekayo 15.01.2016 / 17:39

1 resposta

1

Monte um diretório de host como um volume de dados

Além de criar um volume usando o sinalizador -v, você também pode montar um diretório do host do daemon do Docker em um contêiner.

 $ docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

Este comando monta o diretório do host, / src / webapp, no container em / opt / webapp. Se o caminho / opt / webapp já existir dentro da imagem do contêiner, a montagem / src / webapp será sobreposta, mas não removerá o conteúdo pré-existente. Depois que a montagem é removida, o conteúdo fica acessível novamente. Isso é consistente com o comportamento esperado do comando mount.

O container-dir deve ser sempre um caminho absoluto, como / src / docs. O diretório host pode ser um caminho absoluto ou um valor de nome. Se você fornecer um caminho absoluto para o dir do host, o binder do Docker é montado no caminho especificado. Se você fornecer um nome, o Docker cria um volume nomeado com esse nome.

Um valor de nome deve começar com um caractere alfanumérico, seguido de a-z0-9, _ (sublinhado). (ponto final) ou - (hífen). Um caminho absoluto começa com / (barra).

Por exemplo, você pode especificar / foo ou foo para um valor de host-dir. Se você fornecer o valor / foo, o Docker cria uma montagem de ligação. Se você fornecer a especificação foo, o Docker cria um volume nomeado.

Se você estiver usando o Docker Machine no Mac ou Windows, o daemon do Docker tem acesso limitado ao sistema de arquivos do OS X ou Windows. O Docker Machine tenta compartilhar automaticamente seu diretório / Users (OS X) ou C: \ Users (Windows). Então, você pode montar arquivos ou diretórios no OS X usando.

 docker run -v /Users/<path>:/<container path> ...

No Windows, monte diretórios usando:

 docker run -v /c/Users/<path>:/<container path> ...'

Todos os outros caminhos vêm do sistema de arquivos da sua máquina virtual. Por exemplo, se você estiver usando o VirtualBox alguma outra pasta disponível para compartilhamento, você precisa fazer um trabalho adicional. No caso do VirtualBox, você precisa disponibilizar a pasta do host como uma pasta compartilhada no VirtualBox. Em seguida, você pode montá-lo usando o sinalizador Docker -v.

Montar um diretório de host pode ser útil para testes. Por exemplo, você pode montar o código-fonte dentro de um contêiner. Em seguida, altere o código-fonte e veja seu efeito no aplicativo em tempo real. O diretório no host deve ser especificado como um caminho absoluto e, se o diretório não existir, o Docker o criará automaticamente para você. Esta criação automática do caminho do host foi descontinuada.

Os volumes do Docker padrão são montados no modo de leitura / gravação, mas você também pode configurá-lo para ser montado somente leitura.

    $ docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

Aqui montamos o mesmo diretório / src / webapp, mas adicionamos a opção ro para especificar que a montagem deve ser somente leitura.

Devido a limitações na função de montagem, a movimentação de subdiretórios no diretório de origem do host pode fornecer acesso do contêiner ao sistema de arquivos do host. Isso requer um usuário mal-intencionado com acesso ao host e ao seu diretório montado.

Note: The host directory is, by its nature, host-dependent. For this reason, you can’t mount a host directory from Dockerfile because built images should be portable. A host directory wouldn’t be available on all potential hosts.
    
por 15.01.2016 / 18:00

Tags