首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能ssh到另一个码头集装箱码头-合成

不能ssh到另一个码头集装箱码头-合成
EN

Stack Overflow用户
提问于 2017-06-12 07:50:55
回答 1查看 777关注 0票数 1

我有一个码头映像,我使用作为我的git服务器,我有我所有的数据在其中。然后我有一个数据库容器,在这里我需要从我的git码头服务器克隆数据。

我的docker-compose.yml文件是:

代码语言:javascript
复制
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。

代码语言:javascript
复制
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

在我的数据库文件中,我正在克隆那个回购。

代码语言:javascript
复制
From centos:centos7

.......
RUN git clone git@git-server:dashboard.git
.......

当我运行docker-组合生成时

上面写着

ssh:无法解析主机名git-服务器:名称或服务不知道致命:无法从远程存储库读取。 请确保您有正确的访问权限和存储库存在。

EN

回答 1

Stack Overflow用户

发布于 2017-06-12 08:19:57

在构建时,容器不连接到桥接网络(也不连接到卷)。如果需要容器到容器网络,则需要将该工作流移动到入口点或在容器启动时运行的命令中。

使用Dockerfile中的RUN执行的命令在构建时执行。当docker正在构建您的映像时,它这样做并不需要与其他容器联网,不需要挂载卷,并且不依赖于其他容器。它只需从上一行获取前一个状态,创建一个运行该RUN命令的临时容器,并捕获生成的层。因此,使用容器到容器网络的尝试将失败,因为其他容器在构建时不存在。构建应该是可复制的,并且在可能的情况下独立于外部构件,因此这需要重新设计。

作为重新设计,我会亲自从您的映像步骤中删除git克隆,并将代码包括在您的Dockerfile所在的repo中。在开始构建之前进行任何签出。这有一个好处,就是保留任何秘密,以登录到私人回购,从你的形象。然后,在您的构建中,您只需在映像中执行文件的COPY操作,而不是进行git提取。

如果您的进程需要容器到容器的通信,则另一个选项是在您的CMDENTRYPOINT中运行一个脚本,该脚本运行容器运行时和生成映像时所需的任何步骤。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44494089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档