如何在脚本中执行“docker run”后运行docker 命令?

如何在脚本中执行“docker run”后运行docker 命令?

我的最终目标是启动一个 docker 容器并在该 docker 容器中移动一些文件。因为这需要几个命令,所以我想编写一个脚本来自动执行此操作(而不是每次都手动输入所有这些命令)。我的计划是为此创建一个 bash 脚本。

问题在第一个命令之后就开始了:

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

这会在屏幕上显示以下输出(与我在 Ubuntu 终端中写入命令的 GUI 相同):

[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 终端命令。但是如何在脚本中复制此操作?

答案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

运行脚本后,您现在位于容器中。

或者,您可以只运行几个 docker exec 命令,而不是挂载文件夹。

#!/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

相关内容