Eu uso uma GUI de terceiros (pacote Synology Docker) para configurar um contêiner docker. No entanto, sua limitação me faz precisar executar o contêiner a partir da linha de comando. (Eu quero mapear outro ip de host para ligar a porta)
Agora, como já existem várias configurações feitas, gostaria de recuperar o comando run original que inicia este contêiner, então posso alterar a porta de mapeamento de porta para uma nova. por exemplo. " docker run -p 80:8080 gitlab
"
Não consigo encontrar uma maneira de fazer isso, evento use "docker inspect", nenhuma informação fornecida.
Forneça alguns conselhos para resolver este problema.
Respostas:
Há um repositório github que tenta fazer engenharia reversa do comando docker run, mas não é perfeito atualmente, a versão é
0.1.2
. Você deve segui-lo para atualização. Talvez um dia você possa usá-lo para obter o comando de execução correto com ele.Repositório Github: runlike
Atualizações:
Execute sem instalar (Obrigado @tilo)
ou definir alias
fonte
docker run -v /var/run/docker.sock:/var/run/docker.sock \ assaflavie/runlike YOUR-CONTAINER
Use docker inspect :
Você pode analisar isso programaticamente com jq :
fonte
docker inspect <CONTAINER> | jq ".[0].Config.Cmd"
"Cmd": null,
Talvez isso funcione apenas se o contêiner não foi iniciado automaticamente pelo daemon do docker?Eu escrevi uma ferramenta CLI simples baseada em nó para gerar um
docker run
comando de um contêiner existente.https://www.npmjs.com/package/rekcod
Aqui está um exemplo:
Também lida com links e volumes montados e outras coisas.
Não é super robusto no momento, mas lida com mais do que algumas das outras coisas mencionadas, e era mais do que eu estava procurando.
EDIT: Em um único comando, sem instalar nenhum software:
fonte
Uma alternativa mais simples (?) É executar este modelo de inspeção do docker , que usa os recursos integrados de modelos Go para gerar um
docker run
comando compatível. O modelo cobre apenas as opções de linha de comando mais comuns, mas pode ser facilmente estendido.Esta solução não depende de outras ferramentas, exceto do próprio docker.
fonte
Use o seguinte comando para obter os argumentos de todos os contêineres docker inspect -f "{{.Name}} {{.Path}} {{.Args}}" $ (docker ps -a -q)
fonte
Atualmente, parece que temos que ir 'docker inspect' e recriar manualmente o comando run.
Encontrei alguém tentando escrever um script bash para fazer isso: https://gist.github.com/miracle2k/c85b7b077fdb8d54bc89
mas está incompleto e depende de jq.
fonte
O que poderia ser uma opção mais simples (robusta) seria usar algo como bash-preexec para capturar comandos que começam com "docker run". Você pode então armazenar esses comandos em algum lugar e recuperá-los mais tarde.
Por exemplo, você pode adicionar algo assim em seu perfil bash:
Então você pode simplesmente executar suas coisas:
Quais saídas:
fonte
Se não quiser instalar nada na configuração do servidor Docker em execução, você pode simplesmente executar (substitua
$CONTAINER_NAME
pelo nome do contêiner que deseja que tenha os argumentos run):(para o
rekcod
método )ou
(para o
runlike
método )fonte
Esse comando docker run não é especificado no Dockerfile ou em qualquer outro documento relacionado ao docker.
Você encontra um exemplo na documentação associada ao seu contêiner ou pode inferir que o docker é executado com (pelo menos para o comando e mapeamento de porta) a
docker ps -a
(mas isso não fornecerá as--volumes-from
opções possíveis )Verifique também
/usr/syno/etc/packages/Docker-GitLab/config
Isso difere da própria configuração do gitlab, que na Synology está disponível em
/usr/syno/etc/packages/Docker/synology_gitlab.config
fonte
Para reverter o comando docker run, também existe o seguinte pacote npm.
https://github.com/nexdrew/rekcod
fonte
Todos os arquivos do docker estão aqui, você pode encontrar cmd e montagens por exemplo
ls -la /proc/1
apenas cat itfonte