如何使用 docker-compose 动态分配端口?

Sac*_*kar 8 dynamic docker docker-compose

我正在做项目的docker化。我想在 docker-compose 文件中动态分配端口。

我在互联网上搜索过,但找不到任何解决方案。有任何建议欢迎提出

services:
  db:
    image: "mysql:latest"
    restart: on-failure
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_DATABASE=
    ports:
      - 23316:3305
Run Code Online (Sandbox Code Playgroud)

Docker-compose 端口不应分配给特定端口。它应该是动态生成的。

Eni*_*nix 5

您可以创建单独的.env文件来保存环境相关变量,并在文件中引用这些变量,compose如下所示:

version: '3'

services:
  db:
    image: "mysql:latest"
    restart: on-failure
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_DATABASE=
    ports:
      - ${DB_PORT}:3306
Run Code Online (Sandbox Code Playgroud)

开发.env文件

DB_PORT=3306
Run Code Online (Sandbox Code Playgroud)

生产.env文件

DB_PORT=23316
Run Code Online (Sandbox Code Playgroud)

将上面的文件复制.env到您的服务器,并将其与您的文件放在同一目录中docker-compose.yml

当您运行该docker-compose命令时,它会自动将 compose 文件中的环境变量替换为您在.env文件中定义的内容。

假设您已经使用 部署了生产.env文件docker-compose.yml,那么当您运行命令时

docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

DB_PORT将被替换为23316.

参考:

  1. Compose 中的环境变量
  2. 环境文件