gpt4 book ai didi

git - 无法 ssh 到另一个 Docker 容器 docker-compose

转载 作者:行者123 更新时间:2023-12-02 19:36:32 29 4
gpt4 key购买 nike

我有一个 docker 镜像,我将其用作我的 git 服务器,其中包含我的所有数据。然后我有一个数据库容器,我需要从我的 git docker 服务器克隆数据。

我的 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 我只创建 git repos。
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 中,我正在克隆那个 repo。
From centos:centos7

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

当我运行 docker-compose build

它说

ssh: Could not resolve hostname git-server: Name or service not known fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

最佳答案

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

使用 RUN 执行的命令在 Dockerfile 中是在构建时执行的。当 docker 构建你的镜像时,它不会与其他容器联网,没有安装卷,也没有对其他容器的任何依赖。它只是从前一行中获取先前的状态,创建一个运行 RUN 的临时容器。命令,并捕获生成的图层。因此尝试使用容器到容器网络将失败,因为其他容器在构建时不存在。如果可能,构建应该是可重现的并且独立于外部工件,因此需要重新设计。

作为重新设计,我会亲自从您的镜像步骤中删除 git clone,并将代码包含在您的 Dockerfile 所在的存储库中。在开始构建之前进行任何检查。这具有保留任何 secret 以登录到您的图像之外的私有(private)存储库的优势。然后在您的构建中,您只需执行 COPY将文件放入您的图像而不是 git fetch。

如果您的进程需要容器到容器的通信,另一个选择是在您的 CMD 中运行脚本。或 ENTRYPOINT运行容器时与构建镜像时所需的任何步骤。

关于git - 无法 ssh 到另一个 Docker 容器 docker-compose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44494089/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com