Docker 容器与主机中 Nexus 之间的连接

Posted

技术标签:

【中文标题】Docker 容器与主机中 Nexus 之间的连接【英文标题】:Connection between Docker container and Nexus in host machine 【发布时间】:2020-12-06 05:44:04 【问题描述】:

我正在尝试构建一个 Docker 映像,当它执行命令 RUN mvn package 时,它能够使用安装在我的笔记本中的 Nexus 存储库。我将此行添加到我的 pom.xml:

<repositories>
    <repository>
        <id>maven-group</id>
        <url>http://localhost:8081/repository/maven-group/</url>
    </repository>
</repositories>

但是,应该将 localhost 替换为运行 Nexus 的主机名,但它位于容器主机(我的个人计算机)上。我应该在 url 中写什么来指向我的仓库?我的笔记本主机名无法从容器中解析。或者有没有其他方法可以连接到我的 Nexus 存储库?

【问题讨论】:

您可能会看看From inside of a Docker container, how do I connect to the localhost of the machine? 中描述的技术是否对您有帮助;他们更关注docker run 选项,但是例如,如果您不在本机Linux 主机上,host.docker.internal 主机名应该可以工作。 大卫的答案是正确的。大卫,您应该将此作为答案,以便 OP 可以授予您正确答案复选标记。 【参考方案1】:

我应该在 url 中写什么来指向我的 repo?

您可以将来自docker inspect 命令的Gateway 值放在那里:

$ docker inspect your_docker_container

在网络部分命令输出的最底部有:(我的容器的输出,你的可以不同)

"Gateway": "172.20.0.1"

所以对于你的例子:

<repositories>
    <repository>
        <id>maven-group</id>
        <url>http://172.20.0.1:8081/repository/maven-group/</url>
    </repository>
</repositories>

100% 确定您可以使用 telnet 检查此网关机器中是否打开了 8081 端口(从容器中运行):

$ telnet 172.20.0.1 8081
Trying 172.20.0.1...
Connected to 172.20.0.1.
Escape character is '^]'.

【讨论】:

以上是关于Docker 容器与主机中 Nexus 之间的连接的主要内容,如果未能解决你的问题,请参考以下文章

Docker-关于docker容器之间的连通性及容器与宿主机之间的连通性

Docker实用技巧:容器与主机之间复制文件

Docker之宿主机与容器之间的文件复制与挂载

Docker之宿主机与容器之间的文件复制与挂载

Docker-宿主机与容器之间的文件拷贝

为啥我的 Java 进程在 docker 容器与主机之间消耗两倍的内存