docker - 如何以最少的停机时间在 docker-compose 容器中重新加载环境变量?

标签 docker docker-compose

docker-compose.yml

version: '2'
services:
  app:
    build:
      context: .
    command: python src/app.py
    restart: on-failure
    depends_on:
      - db
    environment:
      - TJBOT_DB_HOST=db
      - TJBOT_API_KEY
      - TJBOT_AUTO_QUESTION_TIME
    env_file:
      - .env
  db:
    image: mongo:3.0.14
    volumes:
      - mongodbdata:/data/db
volumes:
  mongodbdata:

如果我更改 .env 文件,我如何重新加载容器以使用新的环境变量,并减少停机时间?

最佳答案

如果您使用 docker-compose 运行 yml,则只需运行 docker-compose up -d,它将重新创建任何有更改的容器,而所有未更改的服务都保持不变。

$ cat docker-compose.env2.yml
version: '2'

services:
  test:
    image: busybox
    # command: env
    command: tail -f /dev/null
    environment:
      - MY_VAR=hello
      - MY_VAR2=world
  test2:
    image: busybox
    command: tail -f /dev/null
    environment:
      - MY_VAR=same ole same ole

$ docker-compose -f docker-compose.env2.yml up -d                                               
Creating network "test_default" with the default driver
Creating test_test_1
Creating test_test2_1

$ vi docker-compose.env2.yml # edit the file to change MY_VAR

$ docker-compose -f docker-compose.env2.yml up -d
Recreating test_test_1
test_test2_1 is up-to-date

如果您将容器作为具有版本 3 文件格式的 docker stack deploy -c docker-compose.yml 运行,您可以对服务进行滚动更新,这样可以防止任何停机时间运行您的服务的多个实例。此功能仍然很新,您需要 1.13.1 修复一些更新问题,并且与任何新功能一样,错误仍在解决中。

关于docker - 如何以最少的停机时间在 docker-compose 容器中重新加载环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42149529/

相关文章:

python - vscode 在 docker 实例中运行/调试 python

bash - 从 Dockerfile 删除注释创建 bash 脚本

docker - 如何从 docker-compose.yml 指定 nvidia 运行时?

docker - docker-compose何时使用当前生成的镜像,何时重新制作本地镜像?

docker : When creating a machine, VT-X/AMD 已启用

node.js - K8s pod 内存高于进程要求

mysql - 无法在本地连接到 dockerized mysql 容器

docker - 是否可以使用 Docker 远程 API 将图像复制到另一台主机?

具有多容器部署的Azure应用服务暴露了错误的服务

laravel - 如何从一个地方访问不同Docker容器中的脚本?