Докер как отправить запрос (curl - get, post) один контейнер в другой контейнер
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
когда я посылаю запрос curl -X GET http://localhost.3000
to totp_api container
в местный
totp_api
возвращение {'status':200}
но я хочу отправить запрос в service
контейнер
как// curl -X GET http://localhost:3000
to totp_api
в контейнер service
(docker exec-it /bin/bash),totp_api
вернутся {'status':200}
to server
контейнер
project_folder
ㄴ- docker-compose.yml # service, mysql container
api_folder
ㄴ- docker-compose.yml # totp_api container
пожалуйста, кто-нибудь скажите мне совет
после
api / папка / 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"
}
}
]
1 ответов
используя docker networking и сетевые команды, вы можете убедиться, что эти контейнеры являются частью той же сети.
побочным эффектом этой уникальной сети будет контейнер A, который будет знать имя контейнера B: от totp_api
, вы можете ping или завивать service
контейнер с ее именем:
ping service
вы можете:
- сделайте это статически в файле docker compose (и перезапустите новые контейнеры), - протестируйте его на время выполнения, добавление существующих запущенных контейнеров в новую сеть