簡體   English   中英

容器與python請求的通信

[英]Containers communication with python requests

這是我的體系結構:

我有兩個容器(A和B)在具有各自網絡的同一主機上運行。

碼頭工人組成:

version : '3'
services: 

  A: 
    build: ./docker_A
    ports: 
      - "8090:8090"
    networks:
      - my_network

  B:
    build: ./docker_B
    ports: 
      - "8070:8070"    
    networks:
      - my_network

networks: 
  my_network:
    driver : bridge

容器b正在運行一瓶服務器

@get('/')
def hello():
    return {"say":"Hello world"}

run(host='0.0.0.0', port=8070, debug=True)

docker inspect package_name_my_network返回:

{
        "Name": "package_name_my_network",
        "Id": "...",
        "Created": "...",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "...": {
                "Name": "package_name_A",
                "EndpointID": "...",
                "MacAddress": "...",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
            "...": {
                "Name": "package_name_B",
                "EndpointID": "...",
                "MacAddress": "...",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }

我正在嘗試從A發出GET請求:

ret = requests.get('http://172.18.0.2:8070/')

但是每次我收到此響應時: <Response [503]> / Network Error (tcp_error)

我嘗試了幾件事:

將172.18.0.2更改為:

  • B:KO
  • name_package_B:KO
  • 0.0.0.0:KO

從主機:

curl -X GET http://172.18.0.2:8070/ : {"say":"Hello world"}

從A: docker exec -t -i package_name_A /bin/bash :我可以ping:

  • 172.18.0.2
  • package_name_B

如果有人有解決方案,那就太好了。

謝謝你的時間。

編輯:

這是一個代理問題。 如果我未設置https_proxyunset http_proxy ,則可以通過A到達B。問題是,我無法再訪問主機上的服務器(不是容器)。 即使使用EXPORT no_proxy=172.0.0.0嗎?

解決:這是一個代理問題。 我正在使用沒有env var的會話:

session = requests.Session()
session.trust_env = False
ret = session.get(url, json=my_json)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM