TransWikia.com

Docker network & depends_on

Stack Overflow на русском Asked on January 1, 2022

Возникло недопонимание с docker-network и с depends_on.
Вопрос по основной части сетей я уже задавал тут .

Первый вопрос:

depends_on работает достаточно странно в моем случае.
Я создал 2 тестовых image‘a и имею следующую конфигурацию docker-compose.yml:

version: '3.7'

services:
  app1:
    image: test
    build: app1
    command: python3 app1.py
  app2:
    image: test2
    build: .
    depends_on:
        - app1

Но в логах все равно первым почему то запускается контейнер от app2:

root@icyftl:~/temp# docker-compose up
Building app2
Step 1/4 : from ubuntu:latest
 ---> 1e4467b07108
Step 2/4 : RUN apt-get update
 ---> Using cache
 ---> 08682223c800
Step 3/4 : RUN apt-get install curl -y
 ---> Using cache
 ---> 6c6b82a3dca4
Step 4/4 : RUN curl http://app1:8000/test
 ---> Running in ad21307744f6
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (7) Failed to connect to app1 port 8000: Connection refused
ERROR: Service 'app2' failed to build: The command '/bin/sh -c curl http://app1:8000/test' returned a non-zero code: 7

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

Второй вопрос:

Как поднять сервер на flask в контейнере и обращаться к нему из другого контейнера?

При создании связки контейнеров в docker-compose.yml, как я уже понял – автоматом поднимается bridge.
Если я могу сделать ping -c 100 app1 из второго контейнера и он будет работать, то как мне обращаться к серверу на flask, который поднят на 0.0.0.0? curl http://app1:8000/test?

One Answer

Первая проблема возникает потому, что обращение в app1 идет на этапе сборки, т.е. у вас в Dockerfile для app2 есть команда которая пробует обращаться к app2: RUN curl http://app1:8000/test

А на этапе сборки app1 еще не запущен.

По второму вопросу ответ, утвердительный. Если обо сервиса в одной сети (по умолчанию для сервисов из одного compose файла это так), то контейнер каждого из них доступен другому по hostname, который совпадает с именем сервиса в compose файле.

Answered by Roman Konoval on January 1, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP