有没有办法停止泊坞窗容器中的命令
我有一个运行命令的docker容器。 在Dockerfile中,最后一行是CMD ["python", "myprogram.py"]
。 这运行一个瓶服务器。
有一些情况下,当我更新myprogram.py
,需要杀死命令,传递更新的myprogram.py
文件到容器,并再次执行python myprogram.py
。 我想这是一个普遍的情况。
但是,我还没有find办法做到这一点。 由于这是Dockerfile中唯一的命令…我似乎无法杀死它。 从容器terminal,当我运行ps -aux
我可以看到python myprogram.py
分配了1的PID。但是当我尝试用kill -9 1
杀死它时,它似乎不起作用。
有没有解决方法来完成这个? 我的目标是能够在我的主机上更改myprogram.py
,将更新的myprogram.py
传输到容器中,然后再次执行python myprogram.py
。
您可以使用VOLUMES将您的myprogram.py源代码安装到您的容器上,然后只需docker stop
和docker restart
容器。
要制作音量:
在你的Dockerfile中添加一个VOLUME指令并重build你的镜像:
VOLUME /path/to/mountpoint
并在运行图像时使用-v
选项。
docker run -d -v /path/to/dir/to/mount:/path/to/mountpoint myimage
/!\以上步骤仅适用于Linux环境。 /!\
要使用其他东西(如OSX上的Docker-machine),还必须在运行Docker的VM(可能是virtualbox)中创build一个挂载点。
你会有以下计划:
<Dir to share from your host (OSX)> <= (1) mounted on => <Mountpoint on VM> <= (2) mounted on => <Container mountpoint>
(2)就像一个Linux案例(事实上,这是一个Linux案例)。
添加的唯一步骤是在您的虚拟机上安装要从您的主机共享的目录。
以下是将要共享的目录安装到虚拟机中的安装点上,然后将其与容器一起使用的步骤:
1-首先停泊docker机。
docker-machine stop <machine_name>
2-将共享文件夹添加到VM。
VBoxManage sharedfolder add <machine_name> --name <mountpoint_name> --hostpath <dir_to_share>
3重新启动泊坞窗机器:
docker-machine start <machine_name>
4-使用ssh创build安装点并在其上安装共享文件夹:
docker-machine ssh <machine_name> "sudo mkdir <mountpoint_in_vm>; sudo mount -t vboxsf <mountpoint_name> <mountpoint_in_vm>"
5-然后在你的容器上安装目录,运行:
docker run -d -v <mountpoint_in_vm>:</path/to/mountpoint (in the container)> myimage
当你不再需要的时候清理所有这些:
6-在VM中卸载:
docker-machine ssh <machine_name> "sudo umount <mountpoint_in_vm>; sudo rmdir <mountpoint_in_vm>"
7-停止VM:
docker-machine stop <machine_name>
8-删除共享文件夹:
VBoxManage sharedfolder remove <machine_name> --name <mountpoint_name>
这是我为学习目的而编写的一个脚本 ,如果它可以帮助你,请随时使用它。
有一些情况下,当我更新myprogram.py,需要杀死命令,传递更新的myprogram.py文件到容器,并再次执行python myprogram.py。 我想这是一个普遍的情况。
不是真的。 常见的情况是:
- 杀死现有的容器
- 通过你的Dockerfilebuild立新的图像
- 从新映像启动容器
要么:
- 启动容器,并在卷源安装处指向源代码
- 更新代码时重新启动容器
任何一个工作。 第二个是有利于发展,因为它有一个更快的周转。