Docker Compose:更改环境变量

Docker Compose:更改环境变量,docker,docker-compose,Docker,Docker Compose,我已经编写了一个docker compose.yml文件来创建一个带有nodejs和mongodb(so2个容器)的多容器应用程序,我想让一些选项可以配置,例如选择服务器地址和端口。 为此,我在docker-compose.yml中编写了以下内容,将它们设置为环境变量: .. web: environment: - PORT=3000 - ADDRESS=xxx.xxx.xxx.xxx .. 在应用程序的源代码中,我使用process.env

我已经编写了一个
docker compose.yml
文件来创建一个带有nodejs和mongodb(so2个容器)的多容器应用程序,我想让一些选项可以配置,例如选择服务器地址和端口。 为此,我在docker-compose.yml中编写了以下内容,将它们设置为环境变量:

..
    web:
      environment:
        - PORT=3000
        - ADDRESS=xxx.xxx.xxx.xxx
..
在应用程序的源代码中,我使用
process.env.PORT
process.env.ADDRESS
引用这些变量

但是,如果我想更改这些值,例如设置
PORT=3001
,我该怎么做呢? 我必须再次使用
docker compose build
docker compose up
构建所有应用程序,包括mongodb容器

我必须再次使用docker compose构建和docker compose构建所有应用程序,包括mongodb容器

不是
build
,而是
up
。它们是运行时选项,而不是构建选项。在
docker compose.yml
文件中更改它们,然后再次执行
docker compose up
应该使用新的环境变量重新创建容器

或者,您可以在
docker compose.yml
文件之外指定环境变量,以便于进行更改:

  • 其中一种方法是在执行
    docker compose
    表单的同一文件夹中使用
    .env
    文件(有关信息,请参阅)
  • 另一个选项是从shell中插入环境变量。在运行
    docker compose
    之前,您可以在shell上指定它们,例如
    -PORT=${APP\u PORT}
    ,然后
    导出APP\u PORT=3000
    。有关更多信息,请参阅

  • 环境变量是运行时指令,只需在
    docker compose.yml
    中更改它们,然后重新运行
    docker compose up
    。正如johnharris85所述,重新运行docker compose up就足够了。除了使用docker-compose.yml中的环境变量外,您还可以使用一个环境文件:为什么docker compose restart不会重新加载.env变量更改?因为环境是在容器创建时设置的。您将需要使用类似于
    docker compose up--force recreate
    的方法重新创建容器。