【问题标题】:Docker how to send request(curl - get, post) one container to another containerDocker如何将请求(curl - get,post)一个容器发送到另一个容器
【发布时间】:2018-05-26 22:04:28
【问题描述】:

GET(and POST PUT ....) 在一个容器中使用 curl 向另一个容器发出请求。

$ docker ps

CONTAINER ID    IMAGE      COMMAND       PORTS                                           NAMES
b184219cd8f6    otp_totp  "./run.sh"    0.0.0.0:3000->3000/tcp                           totp_api
c381c276593f    service   "/bin/sh -c"  0.0.0.0:8000->8000/tcp, 0.0.0.0:9000->9000/tcp   service
d0add6b1c72e    mysql     "/tmp/run.sh" 0.0.0.0:3306->3306/tcp                           mysql

当我在本地发送请求 curl -X GET http://localhost.3000totp_api container

totp_api返回{'status':200}

但我想在service 容器中发送请求

like// curl -X GET http://localhost:3000totp_api service(docker exec -it /bin/bash) 中的容器,totp_api 将返回 {'status':200}server 容器

project_folder
             ㄴ- docker-compose.yml # service, mysql container
api_folder
         ㄴ- docker-compose.yml # totp_api container

请一些人告诉我一些建议


之后

api/folder/docker-compose.yml

version: '3'
services:
    totp:
        build: .
        container_name: totp_api
        volumes:
            - $PWD:/home
        ports:
            - "3000:3000"
        tty: true
        restart: always
        networks:
            - bridge

networks:
    bridge:
        driver: bridge

-

$ docker-compose up -d
$ docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
4a05be5e600f        bridge              bridge              local
503d0586c7ec        host                host                local
########            ####
727bfc6cc21f        otp_bridge          bridge              local
########            ####
3c19d98d9ca5        otp_default         bridge              local

-

$ docker network inspect otp_bridge

[
    {
        "Name": "otp_bridge",
        "Id": "727bfc6cc21fd74f19eb7fe164582637cbad4c2d7e36620c1c0a1c51c0490d31",
        "Created": "2017-12-13T06:12:40.5070258Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
                "Driver": "default",
                "Options": null,
                "Config": [
                    {
                        "Subnet": "172.19.0.0/16",
                        "Gateway": "172.19.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": true,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {
        "02fa407062cdd5f6f368f2d17c5e68d2f9155d1d9b30c9edcbb2386a9ded648a": {
                "Name": "totp_api",
                "EndpointID": "860c47da1e70d304399b42917b927a8cc6717b86c6d1ee6f065229e33f496c2f",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "bridge",
            "com.docker.compose.project": "otp"
        }
    }
]

【问题讨论】:

    标签: http docker


    【解决方案1】:

    使用docker networkingnetwork commands,您可以确保这些容器属于同一网络。

    该唯一网络的副作用是容器 A 将知道容器 B 的名称:从 totp_api,您可以使用其名称 ping 或 curl service 容器:

    ping service
    

    你可以:

    • 在 docker compose 文件中静态执行(并重新启动新容器),- 在运行时对其进行测试,将现有的正在运行的容器添加到新网络中

    【讨论】:

    • @MinHan 是的:创建一个网络并将正在运行的容器添加到其中。
    • ummmm ,首先我在 totp_api 的 compose.yml 中添加网络...(编辑问题)我得到你的建议了吗?
    • 是的,您可以在 docker compose 文件中静态地执行此操作,但您也可以在运行时对其进行测试,将现有正在运行的容器添加到新网络。
    • 谢谢!我解决了我的问题!非常感谢!
    • 稍微偏离主题,但很有用 - 如果你想从主机卷曲(为了轻松测试卷曲结果),你可以暴露像这样的端口 127.0.0.1:3000:3000。不过,通常不会在生产环境中建议这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多