模糊的端口发布参数到“docker run”

Docker的造船厂项目有一个预先构build的容器来简化组件的运行。 这只是一个启动并链接其他几个容器的运行脚本。

但是,我发现它们在两个运行命令中混淆了port-publish参数(-p):

sudo docker run -i -t -d -p 80 --link shipyard_redis:redis --name shipyard_router shipyard/router sudo docker run -i -t -d -p 80:80 --link shipyard_redis:redis --link shipyard_router:app_router --name shipyard_lb shipyard/lb 

第一个命令将单个parameter passing给“-p”,这似乎不合法,因为每个官方用法都假定至less有两个以冒号分隔的部分:

  -p, --publish=[] Publish a container's port to the host format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort (use 'docker port' to see the actual mapping) 

第二个命令是令人困惑的,因为这似乎会导致与第一个命令中启动的容器发生端口冲突。

有人可以澄清?

当您指定-p只有1 /单个端口号。 Docker自动分配一个随机端口映射(通常从端口49150开始)到容器中暴露的单个端口,即。 80

这意味着什么,可以说你在容器内的端口80上运行Apache 2。 然后你将不得不把你的浏览器指向localhost:49150来访问你的Apache web服务器。