Связь между 2 колбами в докерных контейнерах - PullRequest
1 голос
/ 09 июня 2019

С двумя колбами в двух отдельных контейнерах я думал, что можно будет выполнить запрос GET для одного и вернуть информацию из второго, но я получу [Errno 111] Connection refused.Со следующей настройкой:

app1.py

@app.route('/get_message')
def get_message():
    message = requests.get('http://web2:5001/return_message')
    return message.text

if __name__ == '__main__':
    app.run(host='0.0.0.0')

app2.py

@app.route('/return_message')
def return_message():
    return 'the message'

if __name__ == '__main__':
    app.run(host='0.0.0.0')

docker-compose.yml

version: "3.7"
services:
  web1:
    build: ./web1
    container_name: web1
    ports: 
      - "5000:5000"
  web2:
    build: ./web2
    container_name: web2
    ports: 
      - "5001:5001"

Конечная точка для приложения app1 работает при переходе к http://127.0.0.1:5000/get_message,, но возвращается флакон:

requests.exceptions.ConnectionError: HTTPConnectionPool(host='web2', port=5001): Max retries exceeded with url: /return_message (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb866642d30>: Failed to establish a new connection: [Errno 111] Connection refused',))

Попытка присвоить статический IP-адрес контейнеру web2 и использование IP в запросе get нене работает ни с использованием networks, link или depends_on внутри файла docker-compose.Также попытался выставить разные порты на обоих контейнерах в разных комбинациях, но не получил сообщение между ними.

1 Ответ

1 голос
/ 09 июня 2019

Я думаю, что когда вы вращаете свои приложения, они оба работают на порту 5000, но в разных контейнерах, поэтому попробуйте изменить app1.py на:

@app.route('/get_message')
def get_message():
    message = requests.get('http://web2:5000/return_message')
    return message.text

if __name__ == '__main__':
    app.run(host='0.0.0.0')

А также изменить порты в docker-compose для web2:

version: "3.7"
services:
  web1:
    build: ./web1
    container_name: web1
    ports: 
      - "5000:5000"
  web2:
    build: ./web2
    container_name: web2
    ports: 
      - "5001:5000"

Однако изменение портов в docker-compose не требуется, если вы не хотите получать доступ web2 с хоста - имейте в виду, что здесь я отображаю порт 5001 вашего хоста на порт 5000 контейнера web2, и оба ваших контейнера предоставляют приложение через порт 5000.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...