有没有办法停止泊坞窗容器中的命令

我有一个运行命令的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 stopdocker 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立新的图像
  • 从新映像启动容器

要么:

  • 启动容器,并在卷源安装处指向源代码
  • 更新代码时重新启动容器

任何一个工作。 第二个是有利于发展,因为它有一个更快的周转。