Como posso executar os comandos do docker após o “docker run” de um script?

2

Meu objetivo final é inicializar um contêiner docker e mover alguns arquivos nesse contêiner docker. Como isso requer vários comandos, quero escrever um script que faça isso automaticamente (em vez de escrever todos esses comandos a cada mão). Meu plano aqui é criar um script básico para isso.

O problema começa logo após o primeiro comando:

nvidia-docker run -it --name "Test" gcr.io/tensorflow/tensorflow:latest-gpu

Isso coloca a seguinte saída na tela (na mesma GUI que o terminal do Ubuntu em que eu escrevi o comando):

[I 14:42:36.484 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[W 14:42:36.509 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 14:42:36.513 NotebookApp] Serving notebooks from local directory: /notebooks
[I 14:42:36.513 NotebookApp] 0 active kernels 
[I 14:42:36.513 NotebookApp] The Jupyter Notebook is running at: http://[all ip addresses on your system]:8888/?token=6731bf8e21c987cd142076cbeb77ed3cf0f97275bcdb7bce
[I 14:42:36.513 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 14:42:36.513 NotebookApp] 

Agora eu posso 'sair' digitando ctrl + C, o que me permite voltar ao terminal original (mesmo GUI) e começar a digitar os comandos do terminal Ubuntu novamente. Mas como faço para replicar essa ação em um script?

    
por dimpol 07.03.2017 / 15:39

1 resposta

2

Acho que você está perdendo o parâmetro -d para executá-lo em segundo plano

docker run -d --name "Test" gcr.io/tensorflow/tensorflow:latest-gpu

Fazer isso inicia o contêiner sem transferi-lo para ele. Dessa forma, seu script pode continuar a executar outros comandos.

Agora, se você realmente precisa "mover alguns arquivos" dentro do contêiner, o que você pode fazer é montá-lo como um volume e executá-lo.

docker run -d -v$(pwd):/my --name Test gcr.io/tensorflow/tensorflow:latest-gpu bash 
docker exec -d Test bash /my/script.sh

Dessa forma, você monta seu diretório de trabalho predefinido no contêiner e, em seguida, no contêiner, esse script, enquanto continua no script original. então adicione

docker exec -it Test bash

e agora você está no seu contêiner, depois de ter executado o script.

ou, você pode simplesmente executar vários comandos exec do docker em vez de montar uma pasta.

#!/bin/bash
docker run  -d --name Test gcr.io/tensorflow/tensorflow:latest-gpu bash 
docker exec -d  Test bash cp /x /y
docker exec -d  Test bash cp /y /z
docker exec -it Test bash
    
por AwokeKnowing 03.08.2017 / 23:00