带有多个可配置端口的Docker容器

3

我有一个容器,运行一个包含三个服务器的node应用程序: 一个公共数据服务器和两个webpack服务器。默认情况下,它们运行在端口3000、3001和3002上,但这些端口都可以进行配置。

看起来我可以这样运行容器:

docker run -p 3000:3003 -p 3001:3004 -p 3002:3005 -e 'APP_PORT=3003' \
  -e 'NG_PORT=3004' -e 'RC_PORT=3005' --expose 3003 --expose 3004 --expose 3005 \
  ajcrites/webf

然而这种方法存在两个问题:

  1. 存在大量冗余
  2. 如果没有指定端口,则希望使用/公开默认端口

是否有一种更简单的方法来公开所有可配置的端口,无论它们是否从默认值更改?


我发表这个评论只是以防万一。这可能不是你正在寻找的(如果不相关,我很抱歉,我不确定我是否理解你正在寻找什么),但有一个**-P**选项,它会自动将外部端口分配给暴露的端口。此外,您可以通过在dockerfile中添加EXPOSE指令来公开端口。 - vmonteco
您不需要重复使用“-p”,可以指定多个不连续的端口。 - Auzias
1个回答

2

然而,您不希望暴露所有端口,但自至少docker 1.5以来,您可以按范围公开和绑定:

docker run -p 3000-3002:3003-3005

我认为在发布时不需要使用 --expose。



你不还需要使用相同的端口号进行 --expose 吗? - Explosion Pills
你也可以公开一个范围。 - Ray
@ExplosionPills Expose只会将端口暴露给正在运行的Docker容器中的其他服务,而不是外部服务,因此如果您不需要在Docker内部按端口锁定,则始终可以暴露广泛的范围:https://dev59.com/AmEh5IYBdhLWcg3wtFX4 - Ray
@ExplosionPills 如果你发布了,就不需要显式地暴露。如果你不发布以使它们在服务之间可用,则需要暴露。 - Ray
“-p 3000-3002:3003-3005” 这个命令会自动进行一对一端口映射吗? - Explosion Pills
@ExplosionPills 是的,我相信是这样的。 - Ray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接