不能ssh到另一个docker集装箱docker组成

我有一个docker图像,我用我的git服务器,我有我的所有数据。 那么我有一个数据库容器,我需要从我的git泊坞窗服务器克隆数据。

我的docker-compose.yml文件是:

version: '3' services: git-server: image: git:latest build: context: git ports: - "22:22" my-db: image: my-db:latest build: context: db ports: - "5433:5432" links: - git-server 

对于git docker,我只是在创buildgit仓库。

 FROM kinogmt/centos-ssh:latest ...... RUN mkdir /home/git/dashboard.git WORKDIR /home/git/dashboard.git RUN git --bare init && git --bare fetch git@bitbucket.org:****/******.git ....... EXPOSE 22 

并在我的数据库dockerfile我克隆该回购。

 From centos:centos7 ....... RUN git clone git@git-server:dashboard.git ....... 

当我运行docker构build

它说

ssh:无法parsing主机名git-server:名称或服务未知致命:无法从远程存储库读取。

请确保您拥有正确的访问权限并存在存储库。

在构build时,容器不连接到桥networking(也不连接到卷)。 如果您需要容器到容器联网,则需要将该工作stream程移入您的入口点或容器启动时运行的命令。


在Dockerfile中使用RUN执行的命令在构build时执行。 当docker构build你的镜像时,它不会与其他容器联网,没有安装卷,也不会依赖其他容器。 它只是从先前的行取​​前一个状态,创build一个运行该RUN命令的临时容器,并捕获结果层。 因此,尝试使用容器到容器networking将会失败,因为其他容器在构build时不存在。 在可能的情况下,构build应该是可重现的并且独立于外部的构件,所以这需要重新devise。

作为一个重新devise,我会亲自从你的映像步骤中删除git克隆,并将代码包含在Dockerfile所在的repo中。 在开始构build之前做任何签出。 这样做的好处是可以保留任何秘密,从图像中login到私人数据库中。 然后在你的内部,你只需要将文件复制到你的图像而不是一个git fetch。

另一种select是,如果需要进行容器到容器的通信,则需要在CMDENTRYPOINT中运行脚本,该脚本运行容器运行时与构build映像时所需的任何步骤。