我有一个基于映像的Docker容器,默认情况下,* 启动时不运行任何命令 *。我需要在该容器中执行命令。
运行docker run -it [container tag]
可以运行,但存在两个问题:
1.它运行在交互模式下(正如人们所期望的那样),而我需要的是可以在服务器上运行的东西,没有人的监督。
1.在执行需要运行的命令之前,我需要执行docker cp
命令。
基本上,我得到的是:
docker create
创建容器。docker cp
移过我需要的文件。docker start
启动容器,但由于它没有要运行的默认命令,因此立即退出。docker exec
拒绝运行我的命令,因为容器被停止了。再多的docker start
也无法修复这个问题。
我无法编辑图像Dockerfile,因此不幸的是,无法添加while true; done
(此处建议)作为要运行的默认命令。
我假设已经存在一个将start
和exec
背靠背链接起来的命令(并确保容器在命令运行之前不会关闭,类似于run
是create
-start
-attach
),但我似乎在文档和其他论坛答案中都找不到任何东西。
2条答案
按热度按时间xfb7svmp1#
您可以直接将需要复制的文件所在的目录挂载到容器中,然后运行所需的命令。在本例中,我只运行ls,但我也可以运行脚本本身
在这两种情况下,我实际上都是将脚本挂载到容器映像中,然后使用已挂载的文件运行命令。
dtcbnfnu2#
@Hans Kilian的评论让我想起了传递给
docker run
的参数(在图像之后)是入口点的替换,因此,如果我有一个默认情况下没有入口点的图像,我可以简单地运行:...它将启动容器,但进程不会退出。
之后,我可以自由地运行任意数量的
docker cp
和docker exec
。