如何访问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确实没有做太多的工作。