我有一个码头映像,我使用作为我的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码头,我只创建git。
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在我的数据库文件中,我正在克隆那个回购。
From centos:centos7
.......
RUN git clone git@git-server:dashboard.git
.......当我运行docker-组合生成时
上面写着
ssh:无法解析主机名git-服务器:名称或服务不知道致命:无法从远程存储库读取。 请确保您有正确的访问权限和存储库存在。
发布于 2017-06-12 08:19:57
在构建时,容器不连接到桥接网络(也不连接到卷)。如果需要容器到容器网络,则需要将该工作流移动到入口点或在容器启动时运行的命令中。
使用Dockerfile中的RUN执行的命令在构建时执行。当docker正在构建您的映像时,它这样做并不需要与其他容器联网,不需要挂载卷,并且不依赖于其他容器。它只需从上一行获取前一个状态,创建一个运行该RUN命令的临时容器,并捕获生成的层。因此,使用容器到容器网络的尝试将失败,因为其他容器在构建时不存在。构建应该是可复制的,并且在可能的情况下独立于外部构件,因此这需要重新设计。
作为重新设计,我会亲自从您的映像步骤中删除git克隆,并将代码包括在您的Dockerfile所在的repo中。在开始构建之前进行任何签出。这有一个好处,就是保留任何秘密,以登录到私人回购,从你的形象。然后,在您的构建中,您只需在映像中执行文件的COPY操作,而不是进行git提取。
如果您的进程需要容器到容器的通信,则另一个选项是在您的CMD或ENTRYPOINT中运行一个脚本,该脚本运行容器运行时和生成映像时所需的任何步骤。
https://stackoverflow.com/questions/44494089
复制相似问题