Name: docker-signal-test
Owner: Buildkite
Description: A test for whether `docker run` handles signals correctly
Created: 2015-04-07 15:52:28.0
Updated: 2017-06-16 21:42:06.0
Pushed: 2015-04-07 17:18:19.0
Size: 132
Language: Shell
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
Docker does not proxy through signals to running containers in tty mode.
cker build -t docker-signal-test .
docker run
(no -t
) with kill
Shell 1:
cker run --rm=true docker-signal-test ./signal_printer.sh
ing for a signal...
Shell 2:
cker ps
AINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d1f6535d docker-signal-test:latest "./signal_printer.sh 31 seconds ago Up 30 seconds romantic_pasteur
| grep 'docker run'
0 ttys003 0:00.17 docker run --rm=true docker-signal-test ./signal_printer.sh
ll -s TERM 45470
Shell 1 outputs…
ing for a signal...
ived SIGTERM
ing...
:thumbsup:
docker run -t
with docker kill
Shell 1:
cker run -t --rm=true docker-signal-test ./signal_printer.sh
ing for a signal...
Shell 2:
cker ps
AINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c658052b docker-signal-test:latest "./signal_printer.sh 41 seconds ago Up 40 seconds romantic_shockley
cker kill -s SIGTERM e8f5c658052b
Shell 1 outputs…
ing for a signal...
ived SIGTERM
ing...
:thumbsup:
docker run -t
with kill
Shell 1:
cker run -t --rm=true docker-signal-test ./signal_printer.sh
ing for a signal...
Shell 2:
cker ps
AINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9eeeb36 docker-signal-test:latest "./signal_printer.sh About a minute ago Up About a minute sick_banach
| grep 'docker run'
0 ttys003 0:00.17 docker run -t --rm=true docker-signal-test ./signal_printer.sh
ll -s TERM 44420
Shell 1 outputs…
ing for a signal...
Shell 2 shows Docker is still running:
cker ps
AINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9eeeb36 docker-signal-test:latest "./signal_printer.sh About a minute ago Up About a minute sick_banach
:thumbsdown:
This is no surprise really, because docker run --help
says this:
sig-proxy=true Proxy received signals to the process (non-TTY mode only). SIGCHLD, SIGSTOP, and SIGKILL are not proxied.
docker-compose run
with kill
Shell 1:
cker-compose run --rm test ./signal_printer.sh
ing for a signal...
Shell 2:
| grep 'docker-compose'
3 ttys002 0:00.05 docker-compose run --rm test ./signal_printer.sh
4 ttys002 0:00.21 docker-compose run --rm test ./signal_printer.sh
ll -s TERM 58623
output)
Shell 1:
ing for a signal...
inated: 15
cker ps
AINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8fd3fdb7 dockersignaltest_test:latest "./signal_printer.sh About a minute ago Up About a minute dockersignaltest_test_run_11
cker logs 8e8c8fd3fdb7
ing for a signal...
ing for a signal...
cker kill -s TERM 8e8c8fd3fdb7
8fd3fdb7
cker logs 8e8c8fd3fdb7
ing for a signal...
ing for a signal...
ived SIGTERM
ing...
:thumbsdown:
docker-compose run -T
with kill
Shell 1:
cker-compose run -T --rm test ./signal_printer.sh
output)
Shell 2:
cker ps
AINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7bad0c61 dockersignaltest_test:latest "./signal_printer.sh 4 minutes ago Up 4 seconds dockersignaltest_test_run_8
cker logs 37397bad0c61
ing for a signal...
ing for a signal...
| grep docker
3 ttys002 0:00.06 docker-compose run -T test ./signal_printer.sh
4 ttys002 0:00.24 docker-compose run -T test ./signal_printer.sh
ll -s TERM 55273
Shell 1:
cker-compose run -T test ./signal_printer.sh
inated: 15
Shell 2:
cker ps
AINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7bad0c61 dockersignaltest_test:latest "./signal_printer.sh 7 minutes ago Up 3 minutes dockersignaltest_test_run_8
cker logs 37397bad0c61
ing for a signal...
ing for a signal...
| grep docker
output)
cker kill -s SIGTERM 37397bad0c61
7bad0c61
cker logs 37397bad0c61
ing for a signal...
ing for a signal...
ived SIGTERM
ing...
:thumbsdown:
With docker run
you can only send signals to the docker process (and have them passed to the inner process) if the container is running in non-tty mode (-T
with docker-compose run
, or without the -t
for docker run
). If you run in tty mode you need to send signals using docker kill -s SIGNAME
.
With docker-compose
you can't send any process signals to it directly, as it doesn't proxy them (whether started -T
or not). Also when it does receive a TERM signal it echoes Terminated
and terminates, but it fails to shut down the running Docker container. The only way to kill the running container is to run docker kill
.