我目前正在使用主机上的Python脚本为Docker容器自动执行命令。现在,这个Python脚本构建并运行一个docker-compose文件,并将容器的命令写入docker-compose文件和Dockerfile本身。
我想要做的是让Python脚本操作在容器中运行的所有命令,所以如果我有不同的脚本要运行,我不会改变容器。我已经尝试了两种方法。
首先是在Python脚本中运行os.system()命令,但是,这只在打开容器的外壳时起作用,os.system()命令不会执行Docker容器本身中的代码。
第二种方法在Dockerfile中使用CMD,然而,这是有限的,并且是硬编码到容器中的。如果我有多个脚本,我必须更改Dockerfile,我不想这样。我想要的是在所有服务都运行的情况下构建一个默认容器,然后在主机上运行Python脚本以在容器上运行一系列命令。
我是Docker的新手,我认为在容器上运行脚本命令时,我一定忽略了一些东西。我遇到的一个可能的解决方案是nsenter。这是一个可靠的解决方案吗?它是如何工作的?还是有一种更简单的方法?我还使用了docker-volume将python文件复制到容器中,以便在构建时运行,然而,我仍然找不到一个解决方案来自动从主机访问和运行这些python脚本。
发布于 2020-09-14 14:47:13
如果需要将脚本复制到正在运行的容器中,可以通过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
https://stackoverflow.com/questions/63877747
复制相似问题