在compose中根据环境变量公开docker端口

Leh*_*hks 4 docker docker-compose

我正在使用 docker compose 来设置应用程序环境。有两个不同的环境:测试和生产。

在测试环境中,我需要公开其他端口(用于调试)。这些端口在生产环境中应保持关闭状态。

我也想使用相同的图像和docker-compose.yml文件。使用相同的图像没有问题,但我在撰写文件时遇到了困难。在其中,我想根据环境变量打开或关闭端口。

当前的设置几乎是标准的,如下所示:

# ...
  ports:
    - "8080:8080" # HTTP Server port
    - "9301:9301" # debug port
# ...
Run Code Online (Sandbox Code Playgroud)

在此示例中,两个端口始终暴露。仅当设置了9301某个环境变量(例如 )时,是否可以公开端口?EXPOSE_DEBUG

The*_*ool 6

您可以使用配置文件或第二个撰写文件。

services:
  app-prod:
    &app
    image: busybox
    profiles:
      - production
    ports:
      - 8080:8080

  app-dev:
    <<: *app
    profiles:
      - development
    ports:
      - 8080:8080
      - 9090:9090
Run Code Online (Sandbox Code Playgroud)

然后您可以使用以下命令或环境变量来设置配置文件COMPOSE_PROFILES

docker compose --profile <profile-name> up
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用第二个撰写文件并覆盖端口。

docker compose --profile <profile-name> up
Run Code Online (Sandbox Code Playgroud)
# compose.yaml
services:
  app:
    image: busybox
    ports:
      - 8080:8080
Run Code Online (Sandbox Code Playgroud)

然后你可以使用主文件后面的文件来修补它:

docker compose -f compose.yaml -f compose.dev.yaml up
Run Code Online (Sandbox Code Playgroud)

要使用的文件也可以通过环境变量COMPOSE_FILE,进行控制。

如果您将文件命名为compose.override.yaml,docker 将自动使用它,因此您不必使用 -f 标志来指向它。如果您选择这样做,请注意不要将此文件添加到生产系统中。


您还可以将调试端口绑定到环回接口(127.0.0.1),这样您只能在本地访问它。

# compose.dev.yaml
services:
  app:
    ports:
      - 8080:8080
      - 9090:9090
Run Code Online (Sandbox Code Playgroud)