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

Mar*_*nto 43 docker docker-compose

泊坞窗,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:
Run Code Online (Sandbox Code Playgroud)

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

BMi*_*tch 61

如果您使用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
Run Code Online (Sandbox Code Playgroud)

如果您docker stack deploy -c docker-compose.yml使用版本3文件格式运行容器,则可以对服务进行滚动更新,以防止在运行多个服务实例时出现任何停机.这个功能还是很新的,你需要1.13.1修复一些更新的问题,而且就像这个新的东西一样,bug仍在解决.

  • 仅供参考:使用 compose 版本 3.7,在“docker-compose.yml”中引用“env_file:”时,“docker-compose up -d”也对我有用 (3认同)
  • FYI -d 是分离模式的标志:在后台运行容器 (3认同)
  • 我删除了 .env 文件,添加了新的 docker-compose.prod.yml 文件并覆盖默认设置: docker-compose -f docker-compose.yml -f docker-compose.prod.yml up - d` (2认同)

Phi*_*lip 5

如果您像我一样并且不想重新启动您可以运行的所有内容 docker compose up <service-name> -d