代码之家  ›  专栏  ›  技术社区  ›  Anthony

有没有办法停止docker容器中的命令

  •  1
  • Anthony  · 技术社区  · 8 年前

    我有一个正在运行命令的docker容器。在Dockerfile中,最后一行是 CMD ["python", "myprogram.py"] 这运行一个烧瓶服务器。

    我更新时会出现一些情况 myprogram.py 并且需要终止命令,传输更新的 我的程序.py 文件到容器,并执行 python myprogram.py 再一次我想这是一种常见的情况。

    然而,我还没有找到这样做的方法。因为这是Dockerfile中的唯一命令…我似乎无法杀死它。从集装箱码头 ps -aux 我能看到 python我的程序.py 分配了一个PID为1。但当我尝试用 kill -9 1 它似乎不起作用。

    是否有解决方法来实现这一点?我的目标是能够改变 我的程序.py 在我的主机上,传输更新的 我的程序.py 并执行 python我的程序.py 再一次

    2 回复  |  直到 8 年前
        1
  •  1
  •   vmonteco    8 年前

    您可以使用VOLUMES来装载 我的程序.py 容器上的源代码 docker stop docker restart 容器。

    要制作卷:

    添加 体积 在Dockerfile中执行指令并重建图像:

    VOLUME /path/to/mountpoint
    

    并使用 -v 选项。

    docker run -d -v /path/to/dir/to/mount:/path/to/mountpoint myimage
    

    /!\ 以上这些步骤仅适用于Linux环境。/\

    要将其用于其他东西(比如OSX上的Docker机器),还必须在运行Docker的VM(可能是virtualbox)中创建一个挂载点。

    您将有以下方案:

    <Dir to share from your host (OSX)> <= (1) mounted on => <Mountpoint on VM> <= (2) mounted on => <Container mountpoint>

    (2)完全类似于Linux案例(事实上,它是一个Linux案例)。

    添加的唯一步骤是将要从主机共享的目录装载到VM上。

    以下是将要共享的目录装载到VM中的装载点上,然后将其与容器一起使用的步骤:

    1-首先停止装卸机。

    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创建挂载点并在其上挂载共享文件夹:

    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:

    装卸机停止<机器名>
    

    8-删除共享文件夹:

    VBoxManage sharedfolder remove <machine_name> --name <mountpoint_name>
    

    这里是 a script 我是为了学习而做的,如果它能帮助你,请随意使用。

        2
  •  1
  •   larsks    8 年前

    当我更新我的程序时,会出现一些场景。py,需要杀死 命令,传输更新的myprogram。py文件到容器,以及 执行python myprogram。再次py。我想这是一种普遍现象 脚本

    不是真的。常见的情况是:

    • 杀死现有容器
    • 通过Dockerfile构建新图像
    • 从新映像引导容器

    或者:

    • 使用指向源的卷装入启动容器
    • 更新代码时重新启动容器

    任何一个都可以。第二种方法对开发很有用,因为它的周转稍快。