2017-05-08 65 views
1

我已经编写了一个docker-compose.yml文件来创建一个带有nodejs和mongodb(所以2个容器)的多容器应用程序,并且我希望可以选择某些选项作为服务器地址和端口的选项。 要做到这一点,我已经写在泊坞窗,compose.yml接下来将它们设置为ENV变量:Docker Compose:更改env变量

.. 
    web: 
     environment: 
     - PORT=3000 
     - ADDRESS=xxx.xxx.xxx.xxx 
.. 

在我的应用程序的源代码,我用process.env.PORTprocess.env.ADDRESS来指代这些变量。

但我该怎么办,如果我想改变这些值,例如设置PORT=3001? 我必须再次使用docker-compose builddocker-compose up并构建所有的应用程序,包括mongodb容器?

+2

环境变量是运行时指令,只需在'docker-compose.yml'中更改它们,然后重新运行'docker-compose up'。 – johnharris85

+0

正如johnharris85所提到的,重新运行码头组合起来就足够了。 或者在docker-compose.yml中使用环境变量,您可以使用环境文件: https://docs.docker.com/compose/env-file/ –

回答

2

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

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

或者,您可以在docker-compose.yml文件外指定的环境变量,以使更容易改变:

  1. 其中一个方法是使用.env文件相同的文件夹,你执行docker-compose表(见https://docs.docker.com/compose/env-file/为信息)。
  2. 另一种选择是从你的shell中插入环境变量。在运行docker-compose之前,您可以在您的shell中指定它们,例如- PORT=${APP_PORT}然后export APP_PORT=3000。有关更多信息,请参阅https://docs.docker.com/compose/environment-variables/
-1

您可以使用env_file设置,并在同一行中定义您的环境文件。

这里是我的搬运工,compose.yml的样子:

services: 
    web: 
    env_file: variables.env 

请注意,搬运工,撰写预计在ENV文件中的每一行是在VAR=VAL格式。避免在.env文件中使用export