Mon dernier objectif est de démarrer un conteneur Docker et de déplacer certains fichiers dans ce conteneur Docker. Parce que cela prend plusieurs commandes, je veux écrire un script qui le fait automatiquement (au lieu d'écrire toutes ces commandes à la main). Mon plan ici est de créer un script bash pour cela.
Le problème commence juste après la première commande:
nvidia-docker run -it --name "Test" gcr.io/tensorflow/tensorflow:latest-gpu
Cela a mis la sortie suivante à l'écran (dans la même interface graphique que le terminal Ubuntu où j'ai écrit la commande):
[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]
Maintenant, je peux "quitter" ceci en tapant ctrl + C, ce qui me permet de "revenir" au terminal d'origine (toujours, même interface graphique) et de recommencer à taper les commandes du terminal Ubuntu. Mais comment reproduire cette action dans un script?
Je pense que ce qui vous manque, c'est le paramètre -d
pour l'exécuter en arrière-plan
docker run -d --name "Test" gcr.io/tensorflow/tensorflow:latest-gpu
Faire cela démarre le conteneur sans vous transférer dessus. Ainsi, votre script peut continuer à exécuter d'autres commandes.
Maintenant, si vous devez réellement "déplacer des fichiers" dans le conteneur, vous pouvez monter votre script en tant que volume et l'exécuter.
docker run -d -v$(pwd):/my --name Test gcr.io/tensorflow/tensorflow:latest-gpu bash
docker exec -d Test bash /my/script.sh
Ainsi, vous montez votre répertoire de travail prédéfini dans le conteneur, puis exécutez ce script dans le conteneur tout en continuant votre script d'origine. alors ajoutez
docker exec -it Test bash
et maintenant vous êtes dans votre conteneur, après avoir exécuté le script.
ou bien, vous pouvez simplement exécuter plusieurs commandes docker exec au lieu de monter un dossier.
#!/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