Докер контейнер опускается - PullRequest
1 голос
/ 03 октября 2019

У меня есть 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...