代码之家  ›  专栏  ›  技术社区  ›  Alana Storm

docker映像、docker compose和服务调用的公开端口的单一配置

  •  0
  • Alana Storm  · 技术社区  · 6 年前

    我有一个docker-compose.yml文件,简化如下

    slim-first:
      image: slim-image
      expose:
        - 9191
    
    slim-second:
      image: slim-image
      expose:
        - 9192
    

    这个 slim-image 图像来自 Dockerfile 使用以下命令启动服务(使用php slim框架)

    #File: Dockerfile
    
    # ...
    
    CMD ["/usr/local/bin/php", "-S", "0.0.0.0:9191", "-t", "/slim/public"]
    

    您可能已经发现了这个问题——我需要为php的内置web服务器提供一个端口。不过,我想开始 服务——每个都在不同的端口上可用。

    我的问题:在我的 文档文件 访问 expose 我的D端口值 docker-composer.yml 文件?

    或者是将端口号复制到 文档文件 可以看到。

    或者有第三条路径可以让我只在一个地方配置端口值吗?

    澄清一下,我知道我可以这样做

    slim-second:
      image: slim-image
      expose:
        - 9192
      args:
        - PORT=9192
    
    ...
    
    ARG PORT=9191
    CMD ["/usr/local/bin/php", "-S", "0.0.0.0:$PORT", "-t", "/slim/public"]
    

    但我不想在docker-compose.yml文件中重复端口两次。

    1 回复  |  直到 6 年前
        1
  •  1
  •   David Maze    6 年前

    这无关紧要:您可以在多个容器中运行服务器,这些容器都侦听同一端口,并将它们映射到主机上不同的已发布端口。

    我会在Dockerfile中硬编码端口;说它总是端口9191。然后在 docker-compose.yml 可以设置的文件

    slim-first:
      image: slim-image
      ports: ["9191:9191"]
    slim-second:
      image: slim-image
      ports: ["9192:9191"]
    

    这两个容器可以从主机上的不同端口访问。

    (在Dockerfile中公开主要是文档;它有两个很少相关的副作用。 expose: 在Docker中,compose文件对您没有多大帮助。)

    推荐文章