Почему docker compose периодически теряет связь между контейнерами?

Я использую эту конфигурацию docker compose уже пару лет в продакшене, и все было в порядке, пока на прошлой неделе дважды не произошел случайный сбой...

version: "3.7"
services:
  web:
    image: backend
    build: ..
    restart: unless-stopped
    expose:
      - 8000
    ports:
      - 9109:8000
    env_file:
      - &ENV_FILE ../.env
    depends_on:
      - db
      - worker
    volumes:
      - &MEDIA_VOLUME /srv/media/:/srv/media
      - &STATIC_VOLUME /srv/static/:/srv/static
      - &TMP_VOLUME /tmp/:/tmp/host/
    logging:
      driver: journald
      options:
        tag: docker-web
  worker:
    image: backend
    environment:
      - REMAP_SIGTERM=SIGQUIT
    command: /usr/bin/start-worker.sh
    restart: unless-stopped
    env_file:
      - *ENV_FILE
    depends_on:
      - db
      - redis
      - rabbitmq
    volumes:
      - *MEDIA_VOLUME
      - *STATIC_VOLUME
      - *TMP_VOLUME
    logging:
      driver: journald
      options:
        tag: docker-worker
  db:
    image: mdillon/postgis:11
    shm_size: '256m'
    restart: unless-stopped
    env_file:
      - *ENV_FILE
    volumes:
      - /var/docker-postgres/:/var/lib/postgresql/data/
      - *TMP_VOLUME
    logging:
      driver: journald
      options:
        tag: docker-db
  memcached:
    container_name: memcached
    image: memcached:latest
    ports:
        - "11211:11211"
  rabbitmq:
    image: rabbitmq:management
    ports:
      - 5672:5672
      - 15672:15672
  redis:
    image: redis:latest
    expose:
      - 6379

Внезапно на прошлой неделе я начал видеть ошибки из процесса web:

  • could not translate host name "db" to address: Name or service not known
  • Error -2 connecting to redis:6379. Name or service not known.

Когда я проверил процессы, все они, казалось, работали:

$ docker-compose ps
      Name                     Command               State                Ports              
---------------------------------------------------------------------------------------------
docker_db_1         docker-entrypoint.sh postgres    Up      5432/tcp                        
docker_rabbitmq_1   docker-entrypoint.sh rabbi ...   Up      15671/tcp, 0.0.0.0:15672->15672/
                                                             tcp,:::15672->15672/tcp,        
                                                             15691/tcp, 15692/tcp, 25672/tcp,
                                                             4369/tcp, 5671/tcp, 0.0.0.0:5672
                                                             ->5672/tcp,:::5672->5672/tcp    
docker_redis_1      docker-entrypoint.sh redis ...   Up      6379/tcp                        
docker_web_1        /bin/sh -c /usr/bin/start.sh     Up      0.0.0.0:9109->8000/tcp,:::9109->
                                                             8000/tcp                        
docker_worker_1     /usr/bin/start-worker.sh         Up                                      
memcached           docker-entrypoint.sh memcached   Up      0.0.0.0:11211->11211/tcp,:::1121
                                                             1->11211/tcp                    

Однако кажется, что контейнеры не могли обмениваться данными, поскольку эти ошибки продолжались бесконечно, пока я не stopпроверил контейнеры и startотправил их снова. Потом все было нормально, несколько дней, пока вдруг опять не случилось без веской причины...

Любые идеи, что может происходить?!

$ docker -v
Docker version 24.0.1, build 6802122
$ uname -a
Linux redacted 3.10.0-1160.53.1.el7.x86_64 #1 SMP Fri Jan 14 13:59:45 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
$ docker-compose --version
docker-compose version 1.24.0, build 0aa59064

/etc/resolv.conf в web контейнере:

nameserver 127.0.0.11
options ndots:0

ОБНОВЛЯТЬ

OK нашел некоторые подсказки в /var/log/messages во время последнего сбоя (сегодня утром):

# still working at this point
May 27 05:02:07 my-hostname yum[31556]: Updated: docker-buildx-plugin.x86_64 0.10.5-1.el7
May 27 05:02:09 my-hostname yum[31556]: Updated: docker-ce-cli.x86_64 1:24.0.2-1.el7
May 27 05:02:10 my-hostname yum[31556]: Updated: docker-ce-rootless-extras.x86_64 24.0.2-1.el7
May 27 05:02:16 my-hostname yum[31556]: Updated: docker-ce.x86_64 3:24.0.2-1.el7
May 27 05:02:16 my-hostname systemd: Reloading.
May 27 05:02:17 my-hostname systemd: Stopping Docker Application Container Engine...
May 27 05:02:17 my-hostname dockerd: time = "2023-05-27T05:02:17.087647049+10:00" level=info msg = "Processing signal 'terminated'"
May 27 05:02:17 my-hostname dockerd: time = "2023-05-27T05:02:17.113911997+10:00" level=info msg = "Daemon shutdown complete"
May 27 05:02:17 my-hostname dockerd: time = "2023-05-27T05:02:17.117216292+10:00" level=info msg = "stopping event stream following graceful shutdown" error = "context canceled" module=libcontainerd namespace=plugins.moby
May 27 05:02:17 my-hostname dockerd: time = "2023-05-27T05:02:17.117728466+10:00" level=info msg = "stopping event stream following graceful shutdown" error = "context canceled" module=libcontainerd namespace=moby
May 27 05:02:17 my-hostname systemd: Stopped Docker Application Container Engine.
May 27 05:02:17 my-hostname systemd: Starting Docker Application Container Engine...
May 27 05:02:17 my-hostname dockerd: time = "2023-05-27T05:02:17.301708572+10:00" level=info msg = "Starting up"
May 27 05:02:18 my-hostname dockerd: time = "2023-05-27T05:02:18.895994520+10:00" level=info msg = "[graphdriver] using prior storage driver: overlay2"
May 27 05:02:30 my-hostname dockerd: time = "2023-05-27T05:02:30.709737036+10:00" level=info msg = "Loading containers: start."
May 27 05:02:30 my-hostname dockerd: time = "2023-05-27T05:02:30.754470385+10:00" level=error msg = "stream copy error: reading from a closed fifo"
May 27 05:02:30 my-hostname dockerd: time = "2023-05-27T05:02:30.756943164+10:00" level=error msg = "stream copy error: reading from a closed fifo"
May 27 05:02:30 my-hostname dockerd: time = "2023-05-27T05:02:30.798420878+10:00" level=info msg = "ignoring event" container=562f53739a6c564fb7ca240a68de87489c5132f513977ae53012ecba752d90c4 module=libcontainerd namespace=moby topic=/tasks/delete type = "*events.TaskDelete"
May 27 05:02:30 my-hostname containerd: time = "2023-05-27T05:02:30.798418353+10:00" level=info msg = "shim disconnected" id=562f53739a6c564fb7ca240a68de87489c5132f513977ae53012ecba752d90c4
May 27 05:02:30 my-hostname containerd: time = "2023-05-27T05:02:30.798866207+10:00" level=warning msg = "cleaning up after shim disconnected" id=562f53739a6c564fb7ca240a68de87489c5132f513977ae53012ecba752d90c4 namespace=moby
May 27 05:02:30 my-hostname containerd: time = "2023-05-27T05:02:30.798950034+10:00" level=info msg = "cleaning up dead shim"
May 27 05:02:30 my-hostname containerd: time = "2023-05-27T05:02:30.827844408+10:00" level=warning msg = "cleanup warnings time=\"2023-05-27T05:02:30+10:00\" level=info msg=\"starting signal loop\" namespace=moby pid=22533 runtime=io.containerd.runc.v2\n"
May 27 05:02:30 my-hostname dockerd: time = "2023-05-27T05:02:30.924708741+10:00" level=info msg = "Firewalld: docker zone already exists, returning"
May 27 05:02:31 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D OUTPUT -m addrtype --dst-type LOCAL -j DOCKER' failed: iptables: No chain/target/match by that name.
May 27 05:02:31 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D PREROUTING' failed: iptables: Bad rule (does a matching rule exist in that chain?).
May 27 05:02:31 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D OUTPUT' failed: iptables: Bad rule (does a matching rule exist in that chain?).
May 27 05:02:31 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER' failed: iptables: Too many links.
May 27 05:02:31 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER-ISOLATION-STAGE-1' failed: iptables: Too many links.
May 27 05:02:31 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -F DOCKER-ISOLATION' failed: iptables: No chain/target/match by that name.
May 27 05:02:31 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER-ISOLATION' failed: iptables: No chain/target/match by that name.
May 27 05:02:31 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i br-7630a2794dac -o br-7630a2794dac -j DROP' failed: iptables: Bad rule (does a matching rule exist in that chain?).
May 27 05:02:31 my-hostname dockerd: time = "2023-05-27T05:02:31.454941777+10:00" level=info msg = "Firewalld: interface br-7630a2794dac already part of docker zone, returning"
May 27 05:02:31 my-hostname dockerd: time = "2023-05-27T05:02:31.522751685+10:00" level=info msg = "Firewalld: interface br-7630a2794dac already part of docker zone, returning"
May 27 05:02:31 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i docker0 -o docker0 -j DROP' failed: iptables: Bad rule (does a matching rule exist in that chain?).
May 27 05:02:31 my-hostname dockerd: time = "2023-05-27T05:02:31.780958499+10:00" level=info msg = "Firewalld: interface docker0 already part of docker zone, returning"
May 27 05:02:31 my-hostname dockerd: time = "2023-05-27T05:02:31.844234522+10:00" level=info msg = "Firewalld: interface docker0 already part of docker zone, returning"
May 27 05:02:32 my-hostname dockerd: time = "2023-05-27T05:02:32.460772601+10:00" level=error msg = "failed to populate fields for osl sandbox 9a40c0210cd412288d7c33eb61bad40530ef9ec48f6701bd1e7184c13fa64d3c"
May 27 05:02:32 my-hostname dockerd: time = "2023-05-27T05:02:32.485507497+10:00" level=error msg = "failed to populate fields for osl sandbox cd0489e190d48bd6f4e1361ffb1ef948c5b62695f1c3cc08c0793a12a36e0a70"
May 27 05:02:32 my-hostname dockerd: time = "2023-05-27T05:02:32.511399464+10:00" level=error msg = "failed to populate fields for osl sandbox cf16beecf54d69628a896ed823c890010dc59a288545514b3caab4288b96bbd3"
May 27 05:02:32 my-hostname dockerd: time = "2023-05-27T05:02:32.538845672+10:00" level=error msg = "failed to populate fields for osl sandbox d9d36cdee5fed3740df123decea7d79f189f42de8879500e36c5ce96695603cb"
May 27 05:02:32 my-hostname dockerd: time = "2023-05-27T05:02:32.567477583+10:00" level=error msg = "failed to populate fields for osl sandbox 6735141218e84ebd4f0dc0bfe178c926eb4aedd878cc957463d44506d2e55e83"
May 27 05:02:32 my-hostname dockerd: time = "2023-05-27T05:02:32.597308395+10:00" level=error msg = "failed to populate fields for osl sandbox 74703e4f1bd0cc3d22c0eac14e46c3794a8daef00727f775dd4c4389ee728875"
May 27 05:02:32 my-hostname kernel: br-7630a2794dac: port 8(vethdba34b5) entered disabled state
May 27 05:02:32 my-hostname kernel: device vethdba34b5 left promiscuous mode
May 27 05:02:32 my-hostname kernel: br-7630a2794dac: port 8(vethdba34b5) entered disabled state
May 27 05:02:32 my-hostname NetworkManager[708]: <info>  [1685127752.6322] device (vethdba34b5): released from master device br-7630a2794dac
May 27 05:02:33 my-hostname dockerd: time = "2023-05-27T05:02:33.030110748+10:00" level=info msg = "Removing stale sandbox 8c4bad304b8e2c68b55d49ae928839050b9e6fc20caf369c6d3fae18f2f22f89 (562f53739a6c564fb7ca240a68de87489c5132f513977ae53012ecba752d90c4)"
May 27 05:02:33 my-hostname dockerd: time = "2023-05-27T05:02:33.038984969+10:00" level=warning msg = "Error (Unable to complete atomic operation, key modified) deleting object [endpoint 7630a2794dacc176f1eca74b359658aa646fc256cf8189af6a0963e182e8f85f 4f0d21ab87e2c9f5bcca66178add3e2bd787af62be9be0bc1ef21e41d1ddab6e], retrying...."
May 27 05:02:33 my-hostname dockerd: time = "2023-05-27T05:02:33.055058812+10:00" level=error msg = "failed to populate fields for osl sandbox 945e03bae7b186562c5a3d2993f8d2b4d6fcd1ddea6277743aaac5c20dd26b50"
May 27 05:02:33 my-hostname dockerd: time = "2023-05-27T05:02:33.055937650+10:00" level=info msg = "there are running containers, updated network configuration will not take affect"
May 27 05:02:33 my-hostname dockerd: time = "2023-05-27T05:02:33.058198587+10:00" level=info msg = "Loading containers: done."
May 27 05:02:33 my-hostname dockerd: time = "2023-05-27T05:02:33.163904779+10:00" level=info msg = "Docker daemon" commit=659604f graphdriver=overlay2 version=24.0.2
May 27 05:02:33 my-hostname dockerd: time = "2023-05-27T05:02:33.164168658+10:00" level=info msg = "Daemon has completed initialization"
May 27 05:02:33 my-hostname dockerd: time = "2023-05-27T05:02:33.213072781+10:00" level=info msg = "API listen on /var/run/docker.sock"
May 27 05:02:33 my-hostname systemd: Started Docker Application Container Engine.
# now failing

и предыдущий сбой:

May 21 07:05:59 my-hostname yum[7323]: Updated: docker-compose-plugin.x86_64 2.18.1-1.el7
May 21 07:06:00 my-hostname yum[7323]: Updated: docker-ce-cli.x86_64 1:24.0.1-1.el7
May 21 07:06:01 my-hostname yum[7323]: Updated: docker-ce-rootless-extras.x86_64 24.0.1-1.el7
# working at this point
May 21 07:06:07 my-hostname yum[7323]: Updated: docker-ce.x86_64 3:24.0.1-1.el7
May 21 07:06:07 my-hostname systemd: Reloading.
May 21 07:06:07 my-hostname systemd: Stopping Docker Application Container Engine...
May 21 07:06:07 my-hostname dockerd: time = "2023-05-21T07:06:07.434010268+10:00" level=info msg = "Processing signal 'terminated'"
May 21 07:06:07 my-hostname dockerd: time = "2023-05-21T07:06:07.462825347+10:00" level=info msg = "Daemon shutdown complete"
May 21 07:06:07 my-hostname dockerd: time = "2023-05-21T07:06:07.463607568+10:00" level=info msg = "stopping event stream following graceful shutdown" error = "context canceled" module=libcontainerd namespace=moby
May 21 07:06:07 my-hostname dockerd: time = "2023-05-21T07:06:07.463903566+10:00" level=info msg = "stopping event stream following graceful shutdown" error = "context canceled" module=libcontainerd namespace=plugins.moby
May 21 07:06:07 my-hostname systemd: Stopped Docker Application Container Engine.
May 21 07:06:07 my-hostname systemd: Starting Docker Application Container Engine...
May 21 07:06:07 my-hostname dockerd: time = "2023-05-21T07:06:07.712187157+10:00" level=info msg = "Starting up"
May 21 07:06:09 my-hostname dockerd: time = "2023-05-21T07:06:09.213598321+10:00" level=info msg = "[graphdriver] using prior storage driver: overlay2"
May 21 07:06:21 my-hostname dockerd: time = "2023-05-21T07:06:21.320119275+10:00" level=info msg = "Loading containers: start."
May 21 07:06:21 my-hostname dockerd: time = "2023-05-21T07:06:21.428525472+10:00" level=info msg = "Firewalld: docker zone already exists, returning"
May 21 07:06:21 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D OUTPUT -m addrtype --dst-type LOCAL -j DOCKER' failed: iptables: No chain/target/match by that name.
May 21 07:06:21 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D PREROUTING' failed: iptables: Bad rule (does a matching rule exist in that chain?).
May 21 07:06:21 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t nat -D OUTPUT' failed: iptables: Bad rule (does a matching rule exist in that chain?).
May 21 07:06:21 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER' failed: iptables: Too many links.
May 21 07:06:21 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER-ISOLATION-STAGE-1' failed: iptables: Too many links.
May 21 07:06:21 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -F DOCKER-ISOLATION' failed: iptables: No chain/target/match by that name.
May 21 07:06:21 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -t filter -X DOCKER-ISOLATION' failed: iptables: No chain/target/match by that name.
May 21 07:06:22 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i br-7630a2794dac -o br-7630a2794dac -j DROP' failed: iptables: Bad rule (does a matching rule exist in that chain?).
May 21 07:06:22 my-hostname dockerd: time = "2023-05-21T07:06:22.104048740+10:00" level=info msg = "Firewalld: interface br-7630a2794dac already part of docker zone, returning"
May 21 07:06:22 my-hostname dockerd: time = "2023-05-21T07:06:22.176584026+10:00" level=info msg = "Firewalld: interface br-7630a2794dac already part of docker zone, returning"
May 21 07:06:22 my-hostname firewalld[704]: WARNING: COMMAND_FAILED: '/usr/sbin/iptables -w10 -D FORWARD -i docker0 -o docker0 -j DROP' failed: iptables: Bad rule (does a matching rule exist in that chain?).
May 21 07:06:22 my-hostname dockerd: time = "2023-05-21T07:06:22.493966150+10:00" level=info msg = "Firewalld: interface docker0 already part of docker zone, returning"
May 21 07:06:22 my-hostname dockerd: time = "2023-05-21T07:06:22.587591571+10:00" level=info msg = "Firewalld: interface docker0 already part of docker zone, returning"
May 21 07:06:23 my-hostname dockerd: time = "2023-05-21T07:06:23.228002494+10:00" level=error msg = "failed to populate fields for osl sandbox bc76908fce84399c2679fb6ec97763ec2b3ed11cfc61599ae25df14cc99cab81"
May 21 07:06:23 my-hostname dockerd: time = "2023-05-21T07:06:23.253473513+10:00" level=error msg = "failed to populate fields for osl sandbox dfd2cc470474dd5a0dd7f067fc6988621c53e14c86f06be738b55cb248985965"
May 21 07:06:23 my-hostname dockerd: time = "2023-05-21T07:06:23.277796542+10:00" level=error msg = "failed to populate fields for osl sandbox 53adb48ffcd597198cfb549eab5f9b0e34b6b2d565a82a22ea3b7cfe8198e48b"
May 21 07:06:23 my-hostname dockerd: time = "2023-05-21T07:06:23.303381498+10:00" level=error msg = "failed to populate fields for osl sandbox 6f664d964c34d953bc869dd97cb52345e7271b991423f6defc277d57ab1d8d18"
May 21 07:06:23 my-hostname dockerd: time = "2023-05-21T07:06:23.333007410+10:00" level=error msg = "failed to populate fields for osl sandbox 8c780783dc3060797e991c1fa896e894b25faf94a94ca255731928d339a3fca1"
May 21 07:06:23 my-hostname dockerd: time = "2023-05-21T07:06:23.363884199+10:00" level=error msg = "failed to populate fields for osl sandbox 90004d1d46832307ae98d041c56cea879787fca8c8c9d20c62df0978784b707f"
May 21 07:06:23 my-hostname dockerd: time = "2023-05-21T07:06:23.364885308+10:00" level=error msg = "failed to populate fields for osl sandbox 945e03bae7b186562c5a3d2993f8d2b4d6fcd1ddea6277743aaac5c20dd26b50"
May 21 07:06:23 my-hostname dockerd: time = "2023-05-21T07:06:23.366407341+10:00" level=info msg = "there are running containers, updated network configuration will not take affect"
May 21 07:06:23 my-hostname dockerd: time = "2023-05-21T07:06:23.368298228+10:00" level=info msg = "Loading containers: done."
May 21 07:06:23 my-hostname dockerd: time = "2023-05-21T07:06:23.480334538+10:00" level=info msg = "Docker daemon" commit=463850e graphdriver=overlay2 version=24.0.1
May 21 07:06:23 my-hostname dockerd: time = "2023-05-21T07:06:23.480582539+10:00" level=info msg = "Daemon has completed initialization"
May 21 07:06:23 my-hostname dockerd: time = "2023-05-21T07:06:23.537863940+10:00" level=info msg = "API listen on /var/run/docker.sock"
May 21 07:06:23 my-hostname systemd: Started Docker Application Container Engine.
# now failing

Поэтому я думаю, что триггером проблемы является автоматическое обновление docker пакетов yum в CentOS и перезапуск Docker Application Container Engine, после чего сеть выходит из строя. there are running containers, updated network configuration will not take affect звучит особенно подозрительно!

Помимо отключения автоматических обновлений yum, как я могу гарантировать, что сеть контейнеров не сломается в таких ситуациях?

Нет, я понятия не имею, но, похоже, вы используете мостовую сеть по умолчанию, а не определяемую пользователем мостовую сеть, что не рекомендуется согласно документации: The default bridge network is considered a legacy detail of Docker and is not recommended for production use. Configuring it is a manual operation, and it has technical shortcomings.

gview 23.05.2023 04:28

@Филипп хорошо сделано

DrMeers 27.05.2023 08:18
could not translate host name "db" to address: Name or service not known — ошибка разрешения имени. Ваш DNS (или /etc/hosts или что-то еще, что вы используете для преобразования IP-адресов в имена) не разрешает имя "db" в IP-адрес — отсюда и ошибка 'could not translate host name "db" ...'.
David C. Rankin 27.05.2023 09:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
3
175
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы пробовали с определенной сетью?

Как это:

version: "3.7"
services:
  web:
    image: backend
    build: ..
    restart: unless-stopped
    expose:
      - 8000
    ports:
      - 9109:8000
    env_file:
      - &ENV_FILE ../.env
    depends_on:
      - db
      - worker
    volumes:
      - &MEDIA_VOLUME /srv/media/:/srv/media
      - &STATIC_VOLUME /srv/static/:/srv/static
      - &TMP_VOLUME /tmp/:/tmp/host/
    logging:
      driver: journald
      options:
        tag: docker-web
    networks:
      my_network:

  worker:
    image: backend
    environment:
      - REMAP_SIGTERM=SIGQUIT
    command: /usr/bin/start-worker.sh
    restart: unless-stopped
    env_file:
      - *ENV_FILE
    depends_on:
      - db
      - redis
      - rabbitmq
    volumes:
      - *MEDIA_VOLUME
      - *STATIC_VOLUME
      - *TMP_VOLUME
    logging:
      driver: journald
      options:
        tag: docker-worker
    networks:
      my_network:

  db:
    image: mdillon/postgis:11
    shm_size: '256m'
    restart: unless-stopped
    env_file:
      - *ENV_FILE
    volumes:
      - /var/docker-postgres/:/var/lib/postgresql/data/
      - *TMP_VOLUME
    logging:
      driver: journald
      options:
        tag: docker-db
    networks:
      my_network:

  memcached:
    container_name: memcached
    image: memcached:latest
    ports:
      - "11211:11211"
    networks:
      my_network:

  rabbitmq:
    image: rabbitmq:management
    ports:
      - 5672:5672
      - 15672:15672
    networks:
      my_network:

  redis:
    image: redis:latest
    expose:
      - 6379
    networks: 
      my_network:

networks:
  my_network:
    driver: bridge

Нет, я упомянул об этом в комментарии выше: «Использование пользовательской мостовой сети, безусловно, хорошая идея, но использование моста по умолчанию не обязательно объясняет ошибки, которые мы наблюдаем, насколько я понимаю, это Было бы неплохо узнать, предотвратит ли переключение такие ошибки в будущем или нет». -- Мне нужно объяснение того, как эти проблемы могли возникнуть, и это работает нормально в течение многих лет с сетью по умолчанию.

DrMeers 26.05.2023 01:39

Попробовать ничего не стоит ;-)

Nicolo 26.05.2023 14:15

правда, но даже если он проработает нормально в течение года, я не буду знать наверняка, исправил ли я проблему или нет, не найдя причину

DrMeers 27.05.2023 08:19

Поскольку у контейнеров возникают проблемы при общении друг с другом, мы можем проверить, работает ли DNS-разрешение нормально или нет.

Проверьте, правильно ли работает разрешение DNS в сети Docker. Вы можете попробовать запустить временный контейнер и проверить, работает ли разрешение DNS для имен служб. Например:

docker run --rm -it --network=<your_network> alpine nslookup db
docker run --rm -it --network=<your_network> alpine nslookup redis

--> Если у вас есть какие-либо механизмы кэширования DNS (например, кэширование DNS на хост-компьютере или внутри контейнеров), убедитесь, что они не вызывают конфликтов или устаревшей информации.

--> В крайнем случае Перезапуск Docker: если проблема не устранена и вы не можете найти другие причины, вы можете попробовать перезапустить саму службу Docker. Это может помочь решить любые потенциальные проблемы с сетью или DNS.

--> Также стоит упомянуть, что обновление Docker Compose до последних версий может помочь решить любые известные проблемы или ошибки. Используемая вами версия docker-compose — это docker-compose версии 1.24.0, сборка 0aa59064.

После этого было выпущено так много новых версий. пожалуйста, проверьте здесь последние версии https://github.com/docker/compose/releases

Я столкнулся с проблемами из-за низкой версии docker-compose, используемой в моем приложении. после обновления до последней версии это было исправлено. Но проблема была не совсем той, с которой вы столкнулись.

Я бы не рекомендовал какое-либо тестирование в среде Prod, но параллельно вы можете обновить версию docker-compose и протестировать в dev или qa, чтобы отслеживать проблемы.

Я бы также предложил установить сеть в файле docker-compose, чтобы контейнеры были связаны через внешнюю сеть. Я не уверен, что это может решить эту проблему разрешения имен. Но это то, что вы должны реализовать в своих сервисах.

Надеюсь, это поможет

Спасибо @Krishnadhas! Я только что обновил вопрос, указав важную информацию о регистрации, которая указывает на обновление пакета Docker в качестве причины, просто нужно знать, как сделать его надежным в этих ситуациях обновления.

DrMeers 27.05.2023 10:26

я добавил свои последние комментарии выше. stackoverflow.com/a/76347371/21967160 Пожалуйста, проверьте.

Krishnadhas 27.05.2023 16:25

Я написал это как ответ вместо комментария по причине форматирования текста.

Можете ли вы попробовать добавить следующее в /etc/resolv.conf?

search localdomain
nameserver 127.0.0.11
options edns0 trust-ad ndots:0

что у меня есть, когда я запускаю ваш docker-compose.yml.

Также проверьте /etc/resolv.conf во всех своих контейнерах.

Спасибо, @Philippe, я только что обновил вопрос, добавив важную информацию в журнал, которая указывает на обновление пакета Docker в качестве причины. Знаете ли вы, сделают ли эти изменения устойчивой конфигурацию перед лицом таких обновлений?

DrMeers 27.05.2023 10:24

Мои предлагаемые изменения только возвращают /etc/resolv.conf в исходное состояние, поэтому вряд ли могут вызвать проблемы. В журнале, который вы разместили, много level=error, им нужно больше внимания.

Philippe 27.05.2023 11:35

Ожидаются такие проблемы при обновлении демона Docker. При обновлении демон Docker отключится, а существующие контейнеры будут перезапущены по умолчанию.

Вы можете настроить Docker Daemon для включения Live Restore. Отредактируйте или создайте etc/docker/daemon.json (путь по умолчанию для конфигурации демона Docker в Linux), чтобы указать:

{
  "live-restore": true
}

Обратите внимание, однако, что это может не работать для серьезного обновления (например, 23.x> 24.x), поэтому вы можете соответствующим образом настроить автоматическое обновление.

Спасибо @Pierre B., он годами работал нормально с автоматическими обновлениями демона Docker, и я добавил "live-restore": true к своему /etc/docker/daemon.json еще в марте 2021 года. Эта проблема возникла только за последние две недели. Интересно, в Docker недавно появилась ошибка?

DrMeers 29.05.2023 04:03

да, нашел ошибку докера, см. ответ, который я только что добавил

DrMeers 30.05.2023 08:06
Ответ принят как подходящий

Хорошо, кажется, я нашел проблему: https://github.com/moby/moby/issues/45646

Он работал годами, пока не было выполнено автоматическое обновление до docker-ce.x86_64 3:24.0.1-1.el7, поэтому я предполагаю, что эта ошибка Docker была введена в этот момент.

Я добавил docker* в свою exclude конфигурацию в /etc/yum.conf на данный момент, чтобы избежать прерывания перезапуска, пока ошибка moby не будет исправлена.

Другие вопросы по теме