Моя заключительная цель состоит в том, чтобы запустить контейнер докера и переместить некоторые файлы в том контейнере докера. Поскольку это берет несколько команд, я хочу записать сценарий, который делает это автоматически (в противоположность записи всех этих команд каждый раз вручную). Мой план здесь состоит в том, чтобы создать сценарий удара для этого.
Проблема запускается прямо после первой команды:
nvidia-docker run -it --name "Test" gcr.io/tensorflow/tensorflow:latest-gpu
Это поместило следующий вывод на экран (в том же GUI как терминал Ubuntu, который я записал команде в):
[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]
Теперь я могу 'выйти' из этого путем ввода ctrl+C, который позволяет мне переходить 'назад' к исходному терминалу (все еще, тот же GUI) и начинать вводить команды терминала Ubuntu снова. Но как я копирую это действие в сценарии?
Я думаю, что Вы пропускаете, -d
параметр для выполнения его в фоновом режиме
docker run -d --name "Test" gcr.io/tensorflow/tensorflow:latest-gpu
Выполнение, которое запускает контейнер, не передавая Вас в него. Так, чтобы путь Ваш сценарий мог продолжить выполнять другие команды.
Теперь, если необходимо на самом деле "переместить некоторые файлы" в контейнере, что можно сделать, монтирование сценарий как объем и выполняет его.
docker run -d -v$(pwd):/my --name Test gcr.io/tensorflow/tensorflow:latest-gpu bash
docker exec -d Test bash /my/script.sh
Так, чтобы путь Вы смонтировали свою предварительную установку, которую рабочий каталог в контейнер и затем в контейнере запускает тот скрипт при продолжении вперед в исходном сценарии. таким образом добавьте
docker exec -it Test bash
, и теперь Вы находитесь в своем контейнере, запустив скрипт.
или, можно просто выполнить несколько исполнительных команд докера вместо того, чтобы монтировать папку.
#!/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