Контейнеры не общаются в сети в docker-compose
У меня проблема с сетью Docker-compose. Поэтому я создаю свое общее пространство с контейнерами для ubuntu
, tensorflow
, а также Rstudio
, которые отлично справляются с распределением громкости между ними и хостом, но когда дело доходит до использования ресурсов одного контейнера внутри терминала друг друга, я врезаюсь в стену. Я не могу сделать так же мало, как вызов python в терминале контейнера, в котором его нет. мой docker-compose.yaml
:
# docker-compose.yml
version: '3'
services:
#ubuntu(16.04)
ubuntu:
image: ubuntu_base
build:
context: .
dockerfile: dockerfileBase
volumes:
- "/data/data_vol/:/data/data_vol/:Z"
networks:
- default
ports:
- "8081:8081"
tty: true
#tensorflow
tensorflow:
image: tensorflow_jupyter
build:
context: .
dockerfile: dockerfileTensorflow
volumes:
- "/data/data_vol/:/data/data_vol/:Z"
- .:/notebooks
networks:
- default
ports:
- "8888:8888"
tty: true
#rstudio
rstudio:
image: rstudio1
build:
context: .
dockerfile: dockerfileRstudio1
volumes:
- "/data/data_vol/:/data/data_vol/:Z"
networks:
- default
environment:
- PASSWORD=test
ports:
- "8787:8787"
tty: true
volumes:
ubuntu:
tensorflow:
rstudio:
networks:
default:
driver: bridge
Я довольно новичок в докере, поэтому я не уверен в своих настройках сети. Это, как говорится docker inspect composetest_default
(сеть по умолчанию, созданная для compose) показывает, что контейнеры подключены к сети. Насколько я понимаю, в такой ситуации я могу свободно вызывать одну службу в каждом из других контейнеров и наоборот:
"Containers": {
"83065ec7c84de22a1f91242b42d41b293e622528d4ef6819132325fde1d37164": {
"Name": "composetest_ubuntu_1",
"EndpointID": "0dbf6b889eb9f818cfafbe6523f020c862b2040b0162ffbcaebfbdc9395d1aa2",
"MacAddress": "02:42:c0:a8:40:04",
"IPv4Address": "192.168.64.4/20",
"IPv6Address": ""
},
"8a2e44a6d39abd246097cb9e5792a45ca25feee16c7c2e6a64fb1cee436631ff": {
"Name": "composetest_rstudio_1",
"EndpointID": "d7104ac8aaa089d4b679cc2a699ed7ab3592f4f549041fd35e5d2efe0a5d256a",
"MacAddress": "02:42:c0:a8:40:03",
"IPv4Address": "192.168.64.3/20",
"IPv6Address": ""
},
"ea51749aedb1ec28f5ba56139c5e948af90213d914630780a3a2d2ed8ec9c732": {
"Name": "composetest_tensorflow_1",
"EndpointID": "248e7b2f163cff2c1388c1c69196bea93369434d91cdedd67933c970ff160022",
"MacAddress": "02:42:c0:a8:40:02",
"IPv4Address": "192.168.64.2/20",
"IPv6Address": ""
}
Предыстория - я пытался с links:
внутри docker-compose, но решил сменить networks:
из-за некоторых предупреждений об устаревании. Был ли это правильный путь?
Docker версия 18.09.1
Docker-compose версия 1.17.1
1 ответ
но когда дело доходит до использования ресурсов одного контейнера внутри терминала друг друга, я врезаюсь в стену. Я не могу сделать так же мало, как вызов python в терминале контейнера, в котором его нет.
Вы не можете использовать программы Linux, которые находятся в пути bin контейнера из другого контейнера, но вы можете использовать любой сервис, предназначенный для связи по сети из любого контейнера в вашем файле компоновки Docker.
Путь бен:
$ echo $PATH 127 ↵
/home/exadra37/bin:/home/exadra37/bin:/home/exadra37/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Таким образом, программы по этим путям, которые не предназначены для связи по сети, не могут использоваться из других контейнеров и должны быть установлены в каждом контейнере, в котором они вам нужны, например python
,