Как я могу выполнить команды докера после “докера, выполненного” из сценария?

Моя заключительная цель состоит в том, чтобы запустить контейнер докера и переместить некоторые файлы в том контейнере докера. Поскольку это берет несколько команд, я хочу записать сценарий, который делает это автоматически (в противоположность записи всех этих команд каждый раз вручную). Мой план здесь состоит в том, чтобы создать сценарий удара для этого.

Проблема запускается прямо после первой команды:

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 снова. Но как я копирую это действие в сценарии?

2
задан 7 March 2017 в 18:16

1 ответ

Я думаю, что Вы пропускаете, -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
2
ответ дан 2 December 2019 в 03:42

Другие вопросы по тегам:

Похожие вопросы: