Здесь может происходить несколько вещей. Во-первых, похоже, что вы пытаетесь получить доступ к REST API в другом контейнере, опубликовав порт на хосте, а затем подключившись к опубликованному порту. Это должно работать, но это не обязательно; если вы действительно не хотите предоставлять внешний доступ к этому API, лучше подключить один контейнер напрямую к другому. В этом случае нет необходимости публиковать sh порты.
Самый простой способ сделать это - воспользоваться преимуществами автоматического c DNS, который docker предоставляет в любой сети, отличной от используемой по умолчанию. мостовая сеть. Итак, если мы сначала создадим сеть с именем, скажем, appnet
:
$ docker network create appnet
Затем присоедините наши контейнеры к этой сети:
$ docker run -d --name container0 --network appnet alpinelinux/darkhttpd
$ docker run -d --name container1 --network appnet alpinelinux/darkhttpd
Тогда контейнеры могут ссылаться на друг друга по имени , Например, если я подключаюсь к container0
, я могу получить доступ к веб-службе, работающей на container1
:
<code>$ docker exec -it container0 sh
/ $ wget -O- http://container1:8080
Connecting to container1:8080 (172.22.0.3:8080)
writing to stdout
<html>
<head>
<title>/</title>
</head>
<body>
<h1>/</h1>
<tt><pre>
<a href="..">..</a>/
Или , используя requests
:
<code>$ docker exec -it -u root container0 sh
/ # apk add --update python3 py3-requests
/ # python3
>>> import requests
>>> res = requests.get('http://container1:8080')
>>> res.text
'<html>\n<head>\n <title>/</title>\n</head>\n<body>\n<h1>/</h1>\n<tt><pre>\n<a href="..">..</a>/\n
\ n
\ n \ n \ n '
Тем не менее, порты публикации на вашем хосте должно работать просто отлично. Например, мой хост имеет адрес 192.168.1.200
. Если вместо этого я запускаю контейнеры следующим образом:
$ docker run -d --name container0 -p 1234:8080 alpinelinux/darkhttpd
$ docker run -d --name container1 -p 4321:8080 alpinelinux/darkhttpd
Тогда я могу получить доступ к этим службам на опубликованных портах хоста, как и ожидалось:
<code>$ docker exec -it container0 sh
/ $ wget -O- http://192.168.1.200:1234
Connecting to 192.168.1.200:1234 (192.168.1.200:1234)
writing to stdout
<html>
<head>
<title>/</title>
</head>
<body>
<h1>/</h1>
<tt><pre>
<a href="..">..</a>/
/ $ wget -O- http://192.168.1.200: 4321 Подключение к 192.168.1.200:4321 (192.168.1.200:4321) с записью в стандартный вывод /
/
<a href="..">..</a>/