python - Is there a way to stop a command in a docker container -
i have docker container running command. in dockerfile last line cmd ["python", "myprogram.py"]
. runs flask server.
there scenarios when update myprogram.py
, need kill command, transfer updated myprogram.py
file container, , execute python myprogram.py
again. imagine common scenario.
however, haven't found way this. since command in dockerfile...i can't seem kill it. containers terminal when run ps -aux
can see python myprogram.py
assigned pid of 1. when try kill kill -9 1
doesn't seem work.
is there workaround accomplish this? goal able change myprogram.py
on host machine, transfer updated myprogram.py
container, , execute python myprogram.py
again.
you use volumes mount myprogram.py source code on container, , docker stop
, docker restart
container.
to make volume :
add volume directive in dockerfile , rebuild image :
volume /path/to/mountpoint
and use -v
option when running image.
docker run -d -v /path/to/dir/to/mount:/path/to/mountpoint myimage
/!\ these steps above enough linux environment. /!\
to use else (like docker-machine on osx), must make mount point in vm running docker (probably virtualbox).
you'll have following scheme :
<dir share host (osx)> <= (1) mounted on => <mountpoint on vm> <= (2) mounted on => <container mountpoint>
the (2) linux case (in fact, linux case).
the step added mounting directory want share host on vm.
here steps mount directory want share on mountpoint in vm, , using container :
1- first stop docker machine.
docker-machine stop <machine_name>
2- add sharedfolder vm.
vboxmanage sharedfolder add <machine_name> --name <mountpoint_name> --hostpath <dir_to_share>
3- restart docker machine :
docker-machine start <machine_name>
4- creating mountpoint ssh , mounting sharedfolder on :
docker-machine ssh <machine_name> "sudo mkdir <mountpoint_in_vm>; sudo mount -t vboxsf <mountpoint_name> <mountpoint_in_vm>"
5- , mount directory on container, run :
docker run -d -v <mountpoint_in_vm>:</path/to/mountpoint (in container)> myimage
and clean when don't need anymore :
6- unmount in vm :
docker-machine ssh <machine_name> "sudo umount <mountpoint_in_vm>; sudo rmdir <mountpoint_in_vm>"
7- stop vm :
docker-machine stop <machine_name>
8- remove shared folder :
vboxmanage sharedfolder remove <machine_name> --name <mountpoint_name>
here a script made studies purpose, feel free use if can you.
Comments
Post a Comment