Estou criando um Containerfile
local onde recebo uma pasta de entrada do host que contém os arquivos que preciso dentro do meu contêiner.
A melhor maneira que conheço seria passando por um volume como:
-v /host/path:/opt/input
.
Mas eu gostaria de abstrair o /opt/input
do usuário do contêiner da mesma forma que é possível passar um nome de volume:
-v volume-name:/opt/input
.
O VOLUME não funciona bem assim, mas o que estou tentando alcançar é:
VOLUME ["input-data": "/opt/input"]
Então o usuário pode fazer:
-v /host/path:input-data
E facilitando a evolução do arquivo do contêiner sem quebrar a compatibilidade, caso algum dia eu precise alterar esse caminho.
Existe alguma outra alternativa que eu ainda não consegui descobrir?
Nem o Docker nem o Podman têm como abstrair um caminho de contêiner da maneira que você sugere.
Eu costumo tratar os caminhos do sistema de arquivos do lado do contêiner e as portas do contêiner como parte da interface externamente visível da imagem. Ou seja, o lado direito das
{docker,podman} run -v
opções e-p
são valores fixos bem conhecidos. Se você, como autor da imagem, decidir alterar esses caminhos, estará alterando o comando que um usuário precisa usar.Se você controlar esses caminhos, eu posso tentar escolher um caminho curto e óbvio, talvez apenas
/input
em oposição a/opt/input
. Você pode ser capaz de definir umaENV
variável ouRUN ln -s
criar um symlink se o aplicativo por padrão esperar a entrada em outro lugar.Você não precisa de um Dockerfile
VOLUME
para lugares onde espera que conteúdo externo seja montado. Esta diretiva tem dois efeitos: quando você executa um contêiner, se nada mais for montado lá, o tempo de execução do contêiner cria um volume anônimo para você; eRUN
comandos futuros não podem alterar o diretório. Você podedocker run -v
montar conteúdo externo sobre qualquer diretório de contêiner, independentemente de ser ou não um DockerfileVOLUME
. Se você não tiver certeza sobre qualquer semântica ou detalhes em torno deVOLUME
, geralmente é seguro apenas excluir a diretiva Dockerfile completamente.