首页 > 解决方案 > 如何使用 docker-compose 动态分配端口?

问题描述

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

我在互联网上进行了搜索,但找不到任何解决方案。欢迎任何建议

services:
  db:
    image: "mysql:latest"
    restart: on-failure
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_DATABASE=
    ports:
      - 23316:3305

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

标签: dockerdynamicdocker-compose

解决方案


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

version: '3'

services:
  db:
    image: "mysql:latest"
    restart: on-failure
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_DATABASE=
    ports:
      - ${DB_PORT}:3306

开发.env文件

DB_PORT=3306

生产.env文件

DB_PORT=23316

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

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

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

docker-compose up -d

DB_PORT将替换为23316.

参考:

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

推荐阅读