mirror of
https://github.com/docker/compose.git
synced 2025-07-26 23:24:05 +02:00
add support for stop_signal to compose file
Signed-off-by: Jonathan Stewmon <jstewmon@rmn.com>
This commit is contained in:
parent
d4b4b126fb
commit
5d8c2d3cec
@ -62,6 +62,7 @@ DOCKER_CONFIG_KEYS = [
|
|||||||
'restart',
|
'restart',
|
||||||
'security_opt',
|
'security_opt',
|
||||||
'stdin_open',
|
'stdin_open',
|
||||||
|
'stop_signal',
|
||||||
'tty',
|
'tty',
|
||||||
'user',
|
'user',
|
||||||
'volume_driver',
|
'volume_driver',
|
||||||
|
@ -94,6 +94,7 @@
|
|||||||
"restart": {"type": "string"},
|
"restart": {"type": "string"},
|
||||||
"security_opt": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
|
"security_opt": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
|
||||||
"stdin_open": {"type": "boolean"},
|
"stdin_open": {"type": "boolean"},
|
||||||
|
"stop_signal": {"type": "string"},
|
||||||
"tty": {"type": "boolean"},
|
"tty": {"type": "boolean"},
|
||||||
"ulimits": {
|
"ulimits": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
|
@ -101,6 +101,7 @@
|
|||||||
"restart": {"type": "string"},
|
"restart": {"type": "string"},
|
||||||
"security_opt": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
|
"security_opt": {"type": "array", "items": {"type": "string"}, "uniqueItems": true},
|
||||||
"stdin_open": {"type": "boolean"},
|
"stdin_open": {"type": "boolean"},
|
||||||
|
"stop_signal": {"type": "string"},
|
||||||
"tty": {"type": "boolean"},
|
"tty": {"type": "boolean"},
|
||||||
"ulimits": {
|
"ulimits": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
|
@ -107,6 +107,10 @@ class Container(object):
|
|||||||
def labels(self):
|
def labels(self):
|
||||||
return self.get('Config.Labels') or {}
|
return self.get('Config.Labels') or {}
|
||||||
|
|
||||||
|
@property
|
||||||
|
def stop_signal(self):
|
||||||
|
return self.get('Config.StopSignal')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def log_config(self):
|
def log_config(self):
|
||||||
return self.get('HostConfig.LogConfig') or None
|
return self.get('HostConfig.LogConfig') or None
|
||||||
@ -132,6 +136,10 @@ class Container(object):
|
|||||||
def environment(self):
|
def environment(self):
|
||||||
return dict(var.split("=", 1) for var in self.get('Config.Env') or [])
|
return dict(var.split("=", 1) for var in self.get('Config.Env') or [])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def exit_code(self):
|
||||||
|
return self.get('State.ExitCode')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_running(self):
|
def is_running(self):
|
||||||
return self.get('State.Running')
|
return self.get('State.Running')
|
||||||
|
@ -717,6 +717,18 @@ class CLITestCase(DockerClientTestCase):
|
|||||||
self.assertEqual(len(service.containers(stopped=True)), 1)
|
self.assertEqual(len(service.containers(stopped=True)), 1)
|
||||||
self.assertFalse(service.containers(stopped=True)[0].is_running)
|
self.assertFalse(service.containers(stopped=True)[0].is_running)
|
||||||
|
|
||||||
|
def test_stop_signal(self):
|
||||||
|
self.base_dir = 'tests/fixtures/stop-signal-composefile'
|
||||||
|
self.dispatch(['up', '-d'], None)
|
||||||
|
service = self.project.get_service('simple')
|
||||||
|
self.assertEqual(len(service.containers()), 1)
|
||||||
|
self.assertTrue(service.containers()[0].is_running)
|
||||||
|
|
||||||
|
self.dispatch(['stop', '-t', '1'], None)
|
||||||
|
self.assertEqual(len(service.containers(stopped=True)), 1)
|
||||||
|
self.assertFalse(service.containers(stopped=True)[0].is_running)
|
||||||
|
self.assertEqual(service.containers(stopped=True)[0].exit_code, 0)
|
||||||
|
|
||||||
def test_start_no_containers(self):
|
def test_start_no_containers(self):
|
||||||
result = self.dispatch(['start'], returncode=1)
|
result = self.dispatch(['start'], returncode=1)
|
||||||
assert 'No containers to start' in result.stderr
|
assert 'No containers to start' in result.stderr
|
||||||
|
10
tests/fixtures/stop-signal-composefile/docker-compose.yml
vendored
Normal file
10
tests/fixtures/stop-signal-composefile/docker-compose.yml
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
simple:
|
||||||
|
image: busybox:latest
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- '-c'
|
||||||
|
- |
|
||||||
|
trap 'exit 0' SIGINT
|
||||||
|
trap 'exit 1' SIGTERM
|
||||||
|
while true; do :; done
|
||||||
|
stop_signal: SIGINT
|
@ -887,6 +887,12 @@ class ServiceTest(DockerClientTestCase):
|
|||||||
for name in labels_dict:
|
for name in labels_dict:
|
||||||
self.assertIn((name, ''), labels)
|
self.assertIn((name, ''), labels)
|
||||||
|
|
||||||
|
def test_stop_signal(self):
|
||||||
|
stop_signal = 'SIGINT'
|
||||||
|
service = self.create_service('web', stop_signal=stop_signal)
|
||||||
|
container = create_and_start_container(service)
|
||||||
|
self.assertEqual(container.stop_signal, stop_signal)
|
||||||
|
|
||||||
def test_custom_container_name(self):
|
def test_custom_container_name(self):
|
||||||
service = self.create_service('web', container_name='my-web-container')
|
service = self.create_service('web', container_name='my-web-container')
|
||||||
self.assertEqual(service.custom_container_name(), 'my-web-container')
|
self.assertEqual(service.custom_container_name(), 'my-web-container')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user