У меня есть 3 контейнера, которые общаются и обмениваются данными друг с другом, отправляя задания через RabbitMQ. Со вчерашнего дня последний контейнер, который будет выполнен в рабочем процессе (encoder_aggregatore
), выйдет, как только он будет создан:
$docker-compose up -d --build
[..]
$docker ps -a
0f521c4260a5 encoder_my-pre-encoder "python main.py" About an hour ago Up 20 minutes encoder_my-pre-encoder_1
72c3f5a2aa9c encoder_aggregatore "python /src/main.py" 18 hours ago Exited (1) 20 minutes ago encoder_aggregatore_1
dd9104e888ee encoder_classificatore "python /src/main.py" 20 hours ago Up 20 minutes 0.0.0.0:8080->5000/tcp encoder_classificatore_1
9
Дополнительная информация:
$docker inspect 72c3f5a2aa9c
Вывод здесь .
Я совершенно новичок в Docker. Я не знаю, может ли это помочь, но я заметил, что, если я редактирую код «сломанного» контейнера, новый код компилируется, но выполняется на «старом» задании данных, отправленном контейнером encoder_my-pre-encoder
. Я думаю, что по какой-то причине их связь прервалась. Не могли бы вы дать мне несколько советов о том, что происходит?
РЕДАКТИРОВАТЬ 1:
docker-compose.yml:
version: '2.1'
services:
files:
image: busybox
volumes:
- ./file/input:/file/input
- ./file/output:/file/output
grafana:
image: grafana/grafana:5.1.0
ports:
- 3000:3000
volumes:
- ./prometheus/grafana/:/etc/grafana/provisioning/
environment:
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
- GF_AUTH_BASIC_ENABLED=false
depends_on:
- prometheus
prometheus:
image: prom/prometheus
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- 9090:9090
aggregatore:
build: aggregatore/.
volumes:
- ./aggregatore:/src
volumes_from:
- files
ports:
- 8000:8000
command: ["python", "/src/main.py"]
depends_on:
rabbit:
condition: service_healthy
classificatore:
build: classificatore/.
volumes:
- ./classificatore:/src
volumes_from:
- files
ports:
- 8080:5000
command: ["python", "/src/main.py"]
depends_on:
rabbit:
condition: service_healthy
my-pre-encoder:
build: mpeg-pre-encoder/.
volumes:
- ./my-pre-encoder:/src
- ./gabac_encoder:/src/gabac_encoder
volumes_from:
- files
depends_on:
rabbit:
condition: service_healthy
rabbit:
image: rabbitmq
ports:
- 5672:5672
healthcheck:
test: ["CMD", "rabbitmqctl", "cluster_status"]
interval: 5s
timeout: 2s
retries: 20
журнал контейнеров агрегатора:
Traceback (most recent call last):
File "/src/main.py", line 94, in <module>
rabbit.wait_for_job(worker)
File "/src/util.py", line 75, in wait_for_job
self.channel.start_consuming()
File "/usr/local/lib/python3.7/site-packages/pika/adapters/blocking_connection.py", line 1822, in start_consuming
self.connection.process_data_events(time_limit=None)
File "/usr/local/lib/python3.7/site-packages/pika/adapters/blocking_connection.py", line 758, in process_data_events
self._dispatch_channel_events()
File "/usr/local/lib/python3.7/site-packages/pika/adapters/blocking_connection.py", line 521, in _dispatch_channel_events
impl_channel._get_cookie()._dispatch_events()
File "/usr/local/lib/python3.7/site-packages/pika/adapters/blocking_connection.py", line 1445, in _dispatch_events
evt.body)
File "/src/util.py", line 68, in callback
worker_function(eval(body))
File "<decorator-gen-1>", line 2, in worker
File "/usr/local/lib/python3.7/site-packages/prometheus_client/context_managers.py", line 66, in wrapped
return func(*args, **kwargs)
File "/src/main.py", line 62, in worker
updateMitb(out_file, au['mitb_ptr'], au['AU_start_position'], au['AU_end_position'], au['dscn_value_ptr'])
KeyError: 'mitb_ptr'
Контейнер компилирует «новый» код, который я написал для обработки новых данных, добавленных предыдущими контейнерами (encoder_my-pre-encoder, encoder_classificatore). Поскольку агрегатный контейнер не получает новое задание, он не может обработать новый код в старом задании данных.
aggregatore Dockerfile:
FROM python:3
RUN mkdir /src
ADD requirements.txt /src/.
WORKDIR /src
RUN pip install -r requirements.txt
ADD . /src/.
CMD ["python", "main.py"]
Вход в систему aggregatore /
$python main.py
2019-10-03 14:06:19,988 Could not get addresses to use: [Errno -2] Name or service not known (rabbit)
2019-10-03 14:06:19,988 Could not connect, 0 attempts left
2019-10-03 14:06:19,989 Connection open failed - gaierror(-2, 'Name or service not known')
Traceback (most recent call last):
File "main.py", line 18, in <module>
rabbit = Rabbit()
File "/home/martina/PycharmProjects/mpegg_original/venv/lib/python3.6/site-packages/singleton_decorator/decorator.py", line 14, in __call__
self._instance = self.__wrapped__(*args, **kwargs)
File "/home/martina/PycharmProjects/mpegg_original/encoder/aggregatore/util.py", line 61, in __init__
self.connection = pika.BlockingConnection(pika.ConnectionParameters(host=RABBIT_HOST))
File "/home/martina/PycharmProjects/mpegg_original/venv/lib/python3.6/site-packages/pika/adapters/blocking_connection.py", line 377, in __init__
self._process_io_for_connection_setup()
File "/home/martina/PycharmProjects/mpegg_original/venv/lib/python3.6/site-packages/pika/adapters/blocking_connection.py", line 417, in _process_io_for_connection_setup
self._open_error_result.is_ready)
File "/home/martina/PycharmProjects/mpegg_original/venv/lib/python3.6/site-packages/pika/adapters/blocking_connection.py", line 469, in _flush_output
raise maybe_exception
File "/home/martina/PycharmProjects/mpegg_original/venv/lib/python3.6/site-packages/pika/adapters/base_connection.py", line 176, in _adapter_connect
socket.IPPROTO_TCP)
File "/home/martina/PycharmProjects/mpegg_original/venv/lib/python3.6/site-packages/pika/adapters/base_connection.py", line 304, in _getaddrinfo
return socket.getaddrinfo(host, port, family, socktype, proto)
File "/usr/lib/python3.6/socket.py", line 745, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known
удар в контейнер:
$docker exec -it encoder_aggregatore_1 bash
Error response from daemon: Container 72c3f5a2aa9caba040bc60d1608c193e250967cde1a2b68a74d47cf36be887ee is not running
$docker run -it encoder_aggregatore /bin/bash
root@d5d030d88f76:/src# python main.py
2019-10-03 13:30:30,864 Connection to 31.199.53.9:5672 failed: timeout
2019-10-03 13:30:30,864 Could not connect, 0 attempts left
2019-10-03 13:30:30,865 Connection open failed - 'Connection to 31.199.53.9:5672 failed: timeout'
Traceback (most recent call last):
File "main.py", line 18, in <module>
rabbit = Rabbit()
File "/usr/local/lib/python3.7/site-packages/singleton_decorator/decorator.py", line 14, in __call__
self._instance = self.__wrapped__(*args, **kwargs)
File "/src/util.py", line 61, in __init__
self.connection = pika.BlockingConnection(pika.ConnectionParameters(host=RABBIT_HOST))
File "/usr/local/lib/python3.7/site-packages/pika/adapters/blocking_connection.py", line 377, in __init__
self._process_io_for_connection_setup()
File "/usr/local/lib/python3.7/site-packages/pika/adapters/blocking_connection.py", line 417, in _process_io_for_connection_setup
self._open_error_result.is_ready)
File "/usr/local/lib/python3.7/site-packages/pika/adapters/blocking_connection.py", line 471, in _flush_output
raise exceptions.ConnectionClosed(maybe_exception)
pika.exceptions.ConnectionClosed: Connection to 31.199.53.9:5672 failed: timeout