Mac使用Docker-machine访问docker publish port

简介:

Step 1、Export the port in your Container(Docker-machine or boot2docker)

首先,要保证你发布端口的image已经run起来了。如果你是通过Dockerfile build起来的image,注意在image里面加上下面的一段话:

[html]  view plain  copy
 print ?
  1. Expose 80  

如果你需要发布其他端口,只需把80改变即可。

Expose这个命令的意思是docker image发布一个端口。

然后你需要将基于这个容器的image指定一个端口去绑定:

[html]  view plain  copy
 print ?
  1. docker rum -p 80:80 -d YOUR_IMAGE  

-p选项的含义是把80端口绑定在主机的80端口(这里的“主机”指docker-machine或者boot2docker容器)

如果你不想在你的mac或者windows上通过http://localhost:80的方式去访问,到这就可以结束了。你可以通过你docker-machine或者boot2docker的ip去访问。

[html]  view plain  copy
 print ?
  1. $docker-machine ip MACHINE_NAME  
  2. 192.168.99.100  

这里我就可以通过http://192.168.99.100:80去访问我发布的image


Step 2、Configure VirtualBox

大家都知道docker-machine和boot2docker本身是不能直接在mac或windows下运行的,它必须依附一个VM,这里的VM就是VirtualBox,如何让我们在本机访问docker里发布的应用,这里就需要打开VirtualBox的port forwarding。

运行以下命令通过ssh去转发OSX/Windows的80端口到boot2docker/docker-machine VM的80端口:

[html]  view plain  copy
 print ?
  1. $ boot2docker ssh -vnNTL *:80:localhost:80  

或者你可以设置VirtualBox的参数来进行端口转发:

[html]  view plain  copy
 print ?
  1. $ VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port8000,tcp,,80,,80";  

如果你的VM还在running,你需要运行以下命令:

[html]  view plain  copy
 print ?
  1. $ VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port8000,tcp,,80,,80";  

现在你可以通过localhost:80去访问了。


如果你有很多容器发布同一个端口,你有必要使用docker的动态转发

For example, running 3 nginx containers:

[html]  view plain  copy
 print ?
  1. container-1 : 80 -> 49153 (i.e. docker run -p 49153:80 ...)  
  2. container-2 : 80 -> 49154 (i.e. docker run -p 49154:80 ...)  
  3. container-3 : 80 -> 49155 (i.e. docker run -p 49155:80 ...)  

使用VBoxManage modifyvm命令转发49XXX端口。这种方法可以很容易做到同时转发。

[html]  view plain  copy
 print ?
  1. # vm must be powered off  
  2. for i in {49000..49900}; do  
  3.  VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port$i,tcp,,$i,,$i";  
  4.  VBoxManage modifyvm "boot2docker-vm" --natpf1 "udp-port$i,udp,,$i,,$i";  
  5. done  

如果需要删除发布的端口,可以这么做:

[html]  view plain  copy
 print ?
  1. # vm must be powered off  
  2. for i in {49000..49900}; do  
  3.  VBoxManage modifyvm "boot2docker-vm" --natpf1 delete "tcp-port$i";  
  4.  VBoxManage modifyvm "boot2docker-vm" --natpf1 delete "udp-port$i";  
  5. done  


另发布jboss会发现外部无法访问,这是因为jboss应用只对localhost有效,如果想让外部访问,必须在启动命令后面加上
[html]  view plain  copy
 print ?
  1. <strong><span style="font-size:24px;">-b 0.0.0.0</span></strong>  

这样就绑定了所有ip,不然只有本机能够进行访问。


本文参考:
目录
相关文章
|
1月前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
292 2
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
1月前
|
定位技术 文件存储 网络架构
Docker部署PhotoPrism、Immich图片管理应用,无需公网IP远程访问教程
除了Synology、QNAP、TerraMaster等品牌的NAS设备内置图库功能,市面上还有多种备受欢迎的第三方应用,如PhotoPrism、Immich、LibrePhotos、Piwigo、Photoview等。这些应用不仅提供强大的图片管理能力,还可通过Docker轻松部署。借助贝锐花生壳服务,即使没有公网IP也能实现远程访问,突破地理限制,提升数据可访问性和安全性,让用户随时随地管理私人图库。
113 1
|
1月前
|
网络安全 Docker 容器
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
26 0
|
3月前
|
运维 安全 网络安全
"革新远程访问体验:Docker化部署webssh2,一键启动Web SSH客户端,让远程管理如虎添翼!"
【8月更文挑战第2天】Docker作为软件开发与运维的关键工具,以其轻量级、可移植及强隔离特性简化了应用部署。结合webssh2这一开源Web SSH客户端,可通过浏览器安全便捷地访问SSH服务器,无需额外软件。首先确保已安装Docker,接着拉取webssh2镜像并运行容器,映射端口以便外部访问。配置好SSH服务器后,通过浏览器访问指定URL即可开始SSH会话。此方案不仅提升了用户体验,还加强了访问控制与系统安全。
332 7
|
3月前
|
Kubernetes 应用服务中间件 Docker
在K8S中,Pod网络访问与Docker容器端口映射有何不同?
在K8S中,Pod网络访问与Docker容器端口映射有何不同?
|
3月前
|
NoSQL 关系型数据库 MySQL
无法访问Docker 里的 mysql, redis
无法访问Docker 里的 mysql, redis
25 0
|
4月前
|
监控 数据可视化 Linux
使用Portainer图形化工具轻松管理远程Docker环境并实现远程访问
使用Portainer图形化工具轻松管理远程Docker环境并实现远程访问
|
4月前
|
Ubuntu Linux 数据安全/隐私保护
Linux系统使用Docker部署Cloudreve云盘并实现远程访问
Linux系统使用Docker部署Cloudreve云盘并实现远程访问
68 0
|
4月前
|
Linux Docker 容器
Docker02--搭建Linux环境,配置Docker,docker images无法访问,因为docker没有启动,阿里云镜像加速器免费的
Docker02--搭建Linux环境,配置Docker,docker images无法访问,因为docker没有启动,阿里云镜像加速器免费的
|
4月前
|
前端开发 Docker 容器
前端 CSS 经典:mac docker 效果
前端 CSS 经典:mac docker 效果
50 0