如何在不使用 *** 映像的情况下连接到 docker 中的 ***?
Posted
技术标签:
【中文标题】如何在不使用 *** 映像的情况下连接到 docker 中的 ***?【英文标题】:How can I connect to a *** in docker not using *** images? 【发布时间】:2020-11-25 10:49:07 【问题描述】:早上好!
我正在使用 check point mobile 连接到我的客户端 ***,并且我在 docker 中有 2 个容器:mysql 和 karaf 都共享我使用命令 docker network create --subnet=***Address mynet
创建的网络
我在运行容器时使用了命令--network=mynet
。
直到这里一切正常,我可以通过 putty ssh 连接到 karaf,安装 kar 并且所有包都正常。
但是当调用服务时,我意识到容器没有连接到 ***,即使我用 *** 地址创建了一个网络。我需要连接到 *** 才能调用服务。
我使用 check point mobile 从外部(docker 外部)连接到 ***,但我需要 docker 来添加/连接到 ***。
我使用的是 Windows 10(使用带有 linux 容器的 docker),我尝试转到 C:\ProgramData\DockerDesktop\tmp-d4w
并编辑文件 host.docker.internal
并将 IP 更改为我的 *** 地址,但没有任何效果。
我搜索了很多,看到有人在谈论 docker *** 镜像,例如 nord*** 或 open***,但我无法使用。
我被告知我需要将 *** 网络添加到 docker,但我在网络上是绿色的,我不知道该怎么做,而且我所做的没有用。
希望你能帮助我。谢谢!
编辑:在 docker 引擎中,我添加了 "bip": "***Address/24"
我现在意识到网桥现在使用***地址,尝试在karaf和mysql容器中--network=bridge
,但现在karaf无法连接到mysql,但如果我使用默认docker create network mynet
并使用该网络运行2容器可以,但是用这种方式使用 *** 就不行了。
【问题讨论】:
你应该在运行带有-p标志的容器时声明***端口。 @anlgrses 我刚试过。做了一个 netstat -a 并从 *** 连接中看到了 ipv4 地址,我向 karaf 容器添加了 2 个端口,一个说“正在侦听”,一个说“已建立”。即便如此,也没有运气:( 使用 *** 容器真的不行吗?使用一个 *** 容器并与您需要的容器共享网络非常简单和安全(否则您需要为您的容器设置 NET_ADMIN 功能)。您可能已在 Windows 上的 *** 中连接,但 Docker 可能在 Hyper-V 上的 VM 中运行,因此它不会从您的 Windows 设置继承默认网关 @GustavoKawamoto 我想,但我没有证书,并被告知我可以不用它。 【参考方案1】:处理这些事情的最佳方法是使用 Linux 容器并安装 *** 并执行任何您想要的工作,然后将 Linux 容器推送到 docker hub 以共享工作。 不要忘记添加有关如何从 Linux 容器中检索工作(保存工作的位置)的文档。
【讨论】:
【参考方案2】:我没有在 Windows 上使用过 Docker,但快速浏览一些 *** 容器表明,至少在 *nix 中,它们使用--device /dev/net/tun --cap-add=NET_ADMIN
将 ***“设备”暴露给容器。然后其他容器使用 docker 网络或链接来连接到此 *** 容器 - 因此查看 *** 容器的工作方式可能会有所帮助。
Mac 的一个建议似乎是 using extra_hosts,如下所示:
extra_hosts:
- "***.company.com:172.21.1.1"
你也许可以用类似的东西破解它。 (或在容器中将172.21.1.1 ***.company.com
物理添加到/etc/hosts
)。此外,检查 Docker 守护进程和您的主机之间的 IP address conflicts。
Windows docs 似乎暗示他们不支持将网络接口作为“设备”,因此您可能需要创建一个非常具体的 docker 网络或修改主机网络设置,首先让 Docker 守护进程识别 *** 网络。
有关示例,请参阅Configure Advanced Networking 部分。我会先尝试创建一个与 *** 设备关联的网络,然后查看 --subnet
和 --gateway
等标志。
docker network create -d transparent \
-o com.docker.network.windowsshim.interface="Ethernet 2" TransparentNet2
这将创建一个具有特定子网和网关的网络,然后在该网络上运行一个具有静态分配 IP 的容器。
C:\> docker network create -d transparent \
--subnet=10.123.174.0/23 \
--gateway=10.123.174.1 MyTransparentNet
C:\> docker run -it --network=MyTransparentNet \
--ip=10.123.174.105 windowsservercore cmd
祝你好运!
【讨论】:
感谢您的回答!我真的很欣赏它!我现在就试试你告诉我的。 我尝试了这两个选项你玩我。 1-在 de 容器内的 etc/hosts 中添加 ip。它没有用。 2-创建网络,但它显示消息:“来自守护程序的错误响应:找不到插件“透明”。”我做了一些搜索,我发现透明仅用于 Windows 容器,但不确定该信息。或者,也许我对自己的解释很糟糕,而您认为我使用的是 Windows 容器,如果是这样,对此感到抱歉。我在 Windows 10 上使用 docker,但我使用的是 docker linux 容器。有什么办法吗?或类似的命令?谢谢! 我终于能够做到了 :) 基本上就像你说的那样,我创建了一个与 *** 相关联的网络,并使用 --network 命令为容器提供了要使用的网络。我在容器中对 *** 进行了 ping 操作,一切正常。我也遇到的问题是,使用 *** 我需要传递另一个 IP,这样我才能调用服务。添加 etc/hosts 没有这样做,因为重新启动 karaf 时,ip 会从那里删除。所以在搜索了更多之后,我意识到我必须在运行容器时添加:--add-host=example:ip。之后按预期工作!谢谢!以上是关于如何在不使用 *** 映像的情况下连接到 docker 中的 ***?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 EF 的情况下连接到 ASP.NET Core Web API 中的数据库?
如何在不指定数据库名称的情况下连接到 PostgreSQL?