docker compose中未在网络中通信的容器

docker compose中未在网络中通信的容器,docker,docker-compose,docker-network,docker-link,Docker,Docker Compose,Docker Network,Docker Link,我有一个docker compose网络问题。因此,我用ubuntu、tensorflow和Rstudio的容器创建了我的共享空间,这些容器在它们和主机之间共享卷方面做得非常好,但当涉及到在彼此的终端中使用一个容器的资源时,我碰到了一堵墙。我甚至不能在没有python的容器的终端调用python。Mydocker compose.yaml: # docker-compose.yml version: '3' services: #ubuntu(16.04) ubuntu: image

我有一个docker compose网络问题。因此,我用
ubuntu
tensorflow
Rstudio
的容器创建了我的共享空间,这些容器在它们和主机之间共享卷方面做得非常好,但当涉及到在彼此的终端中使用一个容器的资源时,我碰到了一堵墙。我甚至不能在没有python的容器的终端调用python。My
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 ComposetTest_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": ""
            }
史前-我曾尝试在docker compose中使用
链接:
,但由于一些反对的警告,我决定改为
网络:
。这样做对吗

Docker版本18.09.1

Docker compose版本1.17.1

但当涉及到如何使用一个容器的资源时,我碰到了一堵墙。我甚至不能在没有python的容器的终端调用python

您不能使用位于另一个容器的容器bin路径中的linux程序,但可以使用设计用于通过网络从docker compose文件中的任何容器进行通信的任何服务

箱子路径:

$ 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

,在相同的组合中,您可以使用服务名称调用另一个容器:ping ubuntu、ping tensoflow、,ping rstudio对不起,你能详细说明一下吗?简单地ping服务有什么用?我希望能够积极地使用其他容器中每个容器的功能。说-从R内部使用tensorflow?据我所知,ping请求无法提供此服务,是吗?如果这是一个noob问题,很抱歉,但是-在这种情况下-我如何使它们不在bin路径中,以便使它们可用?换句话说,要使容器具有互操作性并允许无缝集成,必须做些什么?您可以使用所有容器中可用的所有内容构建一个基本docker映像,然后基于该映像构建所有其他docker映像。使程序在另一个容器的容器的bin路径中可用是不可能的,除非您通过ssh连接到另一个容器,但这意味着您正在切换到另一个容器的外壳,加上ssh到容器是不好的做法,它们不应该支持ssh。好的,那么docker compose的要点是什么?我认为这个想法不是把一个容器和所有的东西混在一起,而是用docker compose将工作划分在单独的容器中?你是在单独的容器中分离每个应用程序,这是一个最佳实践,但您误解的是,您认为可以访问其他容器中的程序,而这些容器不是通过网络进行通信的服务。因此docker compose通过网络连接docker容器,您认为它将所有容器聚合/组合为一个大单元,您可以在其中一个单元中获得shell,并可以访问安装在所有单元中的程序。如果您要组合容器,您需要使用扩展其他docker文件的docker文件来完成,但所有这些都将基于链中第一个Dockerfile的操作系统构建。