Docker4Windows -- 从外部(非本机host)访问 由docker container运行的程序

背景

当我们在windows 上面运行docker container的时候,我们需要借助于模拟器(例如,Virtual box/Hyper V),她的目的主要是在我们的windows系统上面模拟出一个Linux环境来运行docker engine,从而在实现在windows机器上面跑docker.。通常,我们把这个模拟器称理解为为docker machine。

 

然而,由此产生了一个问题,那就是相对于Linux,我们在Windows上面跑docker的时候,docker与host之间就多出来了一个中间层(docker machine)。所以,当我们需要在非本机上面访问由container提供的“服务”时,除了expose host/container的端口之外,还需要保证中间层畅通。

 

设置docker machine

具体的方法很简单,就是通过设置virtual box 的网络配置/转发规则。 具体的步骤如下:

 

  1. Open Oracle VM VirtualBox Manager

  2. Select the VM used by Docker

  3. Click Settings -> Network

  4. Adapter 1 should (default?) be "Attached to: NAT"

  5. Click Advanced -> Port Forwarding

  6. Add rule: Protocol TCP, Host Port 1521, Guest Port 1521(leave Host IP and Guest IP empty)

 

貌似有点乱呀,没看懂?没关系!,下面举例说明并配有截图(有真相)

 

我这里的示例是用docker跑一个oracle server 的container,他运行在一台windows机器上面(Host A),然后我在另一个windows机器(Host B)上面链接oracle server.

 

1. 我这里省略了部分container 的过程,只列出CLI

$ docker run -itd --name=xxx --network=xxxNet --hostname=xxx  -p 1521:1521 oracledb11g_img:v1 /bin/bash

 

2. virtual box 中关于网络的配置:

 

 3. 在另外一台机器上通过SQL Deverloper 链接由docker continer创建的数据库

 

Done!! 证明由docker container 承载的 oracle server 可以被其他机器访问。  

posted @   TonyZhang24  阅读(4563)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示