对Docker映像,Docker-Compose和服务调用的暴露端口进行单一配置

时间:2018-11-01 15:06:33

标签: php docker docker-compose dockerfile slim

我有一个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的内置网络服务器提供端口。但是,我正在尝试启动两项服务-每种服务都可以在不同的端口上使用。

我的问题:我的Dockerfile中是否有一种方法可以从我的expose文件访问docker-composer.yml d端口值?

或者是将端口号复制到Dockerfile可以看到的环境变量中的解决方案。

或者是否有一些第三条路径可以让我仅将端口值配置为一个位置?

为了澄清,我知道我可以做这样的事情

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 个答案:

答案 0 :(得分:1)

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

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

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

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

(Dockerfile中的EXPOSE主要是文档;它具有两个很少相关的副作用。DockerCompose文件中的expose:并没有为您做任何事情。)