0

我目前正在使用主机上的 Python 脚本为 Docker 容器自动执行命令。这个 Python 脚本现在构建并运行一个docker-compose文件,将容器的命令写入docker-compose文件及其Dockerfile本身。

我想要做的是让 Python 脚本操作所有命令在容器内运行,所以如果我有不同的脚本要运行,我不会更改容器。我尝试了两种方法。

首先是os.system()在 Python 脚本中运行命令,但是,这只适用于打开容器的 shell,os.system()命令不会在 Docker 容器本身中执行代码。

第二种方法在 . 中使用 CMD Dockerfile,但是,这是有限的,并且是硬编码到容器中的。如果我有多个脚本,我必须更改Dockerfile,我不想要这个。我想要的是构建一个运行所有服务的默认容器,然后在主机上运行 Python 脚本以在容器上运行一系列命令。

我对 Docker 还很陌生,我认为在容器上运行脚本命令一定有一些我忽略的东西。我遇到的一种可能的解决方案是nsenter. 这是一个可靠的解决方案吗?它是如何工作的?还是有更简单的方法?我也曾经docker-volume将 python 文件复制到容器中以在构建时运行,但是,我仍然找不到从主机自动访问和运行这些 python 脚本的解决方案。

4

1 回答 1

1

如果需要将脚本复制到正在运行的容器中,您可以通过docker cp命令执行此操作。例如docker cp myscript.sh mycontiainer:/working/dir

脚本在容器中后,您可以通过docker exec命令运行它们。例如docker exec -it mycontainer /working/dir/myscript.sh

请注意,这不是常见的做法。通常,您需要的脚本将被构建(而不是复制)到容器映像中。然后,当您想在容器中执行脚本时,您可以通过docker run命令运行容器。例如docker run -it mycontainerimage /working/dir/myscript.sh

于 2020-09-14T06:47:12.943 回答