我有一个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文件中重复两次该端口。
答案 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:
并没有为您做任何事情。)