如何访问Docker中的泊坞窗内的Web应用程序
这可能听起来有线,但我必须创build一个Web应用程序,说一个docker上的docker上的一个平均值。
该应用程序工作正常,如果在主机上的泊坞窗上设置,它会暴露端口3000主机和主机可以访问它使用xxxx:3000。 然而,既然它住在泊坞窗中,我在这个项目中使用了dind,所以我无法从主机访问它,因为中间层泊坞窗容器并没有将3000的容器从它的容器转移到它的主机。
在dind项目中,它讲述了一些关于端口公开的命令:
docker run --privileged -d -p 4444 -e PORT=4444 dind
然而,它只能服务于守护进程,没有其他交互式命令行,所以即使docker拉不可能,而且我不确定它到底是什么。 现在我只是使用:
docker run --privileged -d -it -p 3000 dind
而且它不会将第二层docker容器转发到外部主机。
有关这种情况的任何想法? 我已经尝试了很多,但没有任何想法。
多谢你们
看看docker帮助部分:
docker help run
–privileged = false给这个容器赋予扩展权限
从Docker参考 :
默认情况下,Docker容器是“非特权”,不能在Docker容器中运行Docker守护进程。 这是因为默认情况下容器不允许访问任何设备,但是“特权”容器可以访问所有设备
这使您可以在docker内部运行docker。
-p,–publish = []将容器的端口发布到主机
format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort (use 'docker port' to see the actual mapping)
这是一个奇特的方式来说,揭露主机上的这些端口。 所以你的docker容器将公开端口4444到你的本地主机
-e,–env = []设置环境variables
这会在docker容器中设置一个环境variables,供docker环境使用,在您的命令中,您将环境variablesPORT设置为4444
基本上你在'dind'容器中运行的任何东西都可以使用这个环境variables来使用暴露的端口,也就是说你的web应用程序应该运行在端口4444上
如果你想暴露3000端口,你可以使用:
docker run --privileged -d -p 3000:3000 -e PORT=3000 dind
免责声明:我没有使用后,但基本的docker概念在那里。 也许在dind里面的应用足够聪明,可以使用PORT环境variables将你的应用的端口3000映射到4444,这是完全可能的,但不知道你的设置是如何的。
我在研究后find答案…我不得不承认,在docker和Linux上我是如此的绿色…
所以docker集装箱仍然是一个虚拟机,但它本身也有端口转发function。 唯一的问题是,容器必须locking主机中实际使用的端口。
docker工人与docker工人没有区别。 所以主机将像中间层docker的远程机一样工作。 因此,中层docker应该做的就像是如何将其容器暴露给远程机器,因为另一个post说远程访问docker容器奇怪的是,使用另一个端口(我select8442)作为一个中间层港口,这个问题神秘地解决了。 docker命令是这样的:
docker run -p 3000:8442 -d dind docker run -p 8442:3000-d app
而从主机,我可以使用dind容器ip和端口3000访问应用程序。
我遇到的问题使我对dockernetworking有了更多的了解,尤其是这个官方的文档容器networking ,dind确实没有做太多的工作。
- 如何访问本地networking中的Docker容器?
- Docker:挂载音量和运行节点应用程序
- 如何发布一个不同于默认端口的端口?
- 无法在Linux上使用绝对path创buildDocker卷
- 从webpack 2使用webpack-dev-server在Docker容器中后端api代理请求
- 当我在Kubernetes中使用Deployment时,apps / v1beta1和extensions / v1beta1有什么区别?
- 官方Selenium Hub docker镜像的自定义返回“权限被拒绝”
- build立在将用户设置为非特权用户的泊坞窗图像上
- 在Ubuntu 16.04中创buildMarklogic docker实例来暴露端口