Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker compose:将随机容器端口传递给环境变量_Docker_Docker Compose - Fatal编程技术网

Docker compose:将随机容器端口传递给环境变量

Docker compose:将随机容器端口传递给环境变量,docker,docker-compose,Docker,Docker Compose,是否可以在docker compose文件中将有关NetworkSetting的容器信息设置到环境变量中 我有以下docker-compose.yml文件: version: '3.7' services: sdt-proxy: image: myimage ports: - 32770-32780:8181 environment: - SERVER_PORT=8181 它将端口8181映射到32770-32780之间的随机端口。当我使用d

是否可以在docker compose文件中将有关NetworkSetting的容器信息设置到环境变量中

我有以下docker-compose.yml文件:

version: '3.7'
services:
  sdt-proxy:
    image: myimage
    ports:
      - 32770-32780:8181
    environment:
      - SERVER_PORT=8181
它将端口8181映射到32770-32780之间的随机端口。当我使用
docker compose up
运行容器时,我可以使用
docker inspect
查看映射的端口:

.....
 "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "83e6933aaf7b09b8ae1238d3dbb71bdd495c14927a5a509b332afc17cda6d854",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "8181/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "32771"
                    }
                ]
            },
...
因此,我知道内部端口8181(我在容器中运行的应用程序)映射到端口32771

我需要将此信息(容器端口32771)传递给我的应用程序,是否可以在docker compose文件中执行类似操作

version: '3.7'
services:
  sdt-proxy:
    image: myimage
    ports:
      - 32770-32780:8181
    environment:
      - SERVER_PORT=8181
      - MY_CONTAINER_PORT= <the running container port 32771>
版本:“3.7”
服务:
sdt代理:
图片:myimage
端口:
- 32770-32780:8181
环境:
-服务器端口=8181
-我的\u容器\u端口=

为什么容器内的东西需要知道容器外的东西在哪个端口看到它?该
docker compose
文件中还有哪些其他服务,以及它们如何连接到
sdt代理
?如果您的应用程序位于另一个容器中,您可以使用相同的
docker compose up
命令启动,它可以直接在
sdt proxy:8181
上访问该服务。除此之外,@jonrsharpe的评论的答案将是有趣的。@jonrsharpe sdt代理应用程序需要将此信息推送到另一个主机服务(就像它是一个服务寄存器一样)。