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

具有多个可配置端口的Docker容器,docker,Docker,我有一个容器,它运行一个节点应用程序,有三个服务器:一个用于公共数据的服务器和两个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 --exp

我有一个容器,它运行一个节点应用程序,有三个服务器:一个用于公共数据的服务器和两个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
然而,这种方法存在两个问题:

  • 有大量的冗余
  • 如果未指定任何内容,我希望使用/公开默认端口

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

    您不想公开所有端口,但是您可以按范围公开和绑定,因为至少docker 1.5:

    docker run -p 3000-3002:3003-3005
    

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

    您是否还需要使用相同的端口号执行--expose操作?您也可以公开一个范围。@ExplosionPills expose只将端口公开给运行docker容器中的其他运行服务,而不是外部,因此,如果您不需要通过docker内的端口锁定,您可以始终公开大范围的内容:@ExplosionPills如果您发布,则无需明确公开。如果您不发布以使它们在服务间可用,则需要公开。
    -p 3000-3002:3003-3005
    这会自动将端口一一映射吗?我发表此评论以防万一。它可能不是您要搜索的内容(我不确定我是否完全理解您要搜索的内容,如果不相关,我很抱歉),但有一个-P选项可以自动将外部端口分配给公开的端口。此外,您还可以通过向dockerfile添加EXPORT指令来公开端口。yoiu无需重复
    -p
    ,您可以指定多个不同的端口(它们不连续)