GET(和 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
当我在本地向 totp_api 容器
发送请求 curl -X GET http://localhost.3000
时
totp_api
返回 {'status':200}
但我想在 service
容器中发送请求
like//curl -X GET http://localhost:3000
到 service
中的 totp_api
容器(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"
}
}
]
最佳答案
使用 docker networking和 network commands ,您可以确保这些容器属于同一网络。
该唯一网络的副作用是容器 A 将知道容器 B 的名称:从 totp_api
,您可以使用其名称 ping 或 curl service
容器:
ping service
你可以:
- 在 docker compose 文件中静态执行(并重新启动新容器), - 在运行时对其进行测试,将现有的正在运行的容器添加到新网络中
关于http - Docker如何将请求(curl - get,post)一个容器发送到另一个容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47785855/