当前位置: 首页 > 面试题库 >

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

狄信然
2023-03-14
问题内容

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

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



 类似资料:
  • 问题内容: 是否可以重用在多个容器之间共享的环境变量以避免重复,如本示例所示: 问题答案: 该选项可能是好的,但它不支持在撰写文件。其他走的方式是: 扩展名字段(撰写文件3.4+) 如果可以使用3.4+组成文件,则扩展名字段可能是最佳选择: docker-compose.yml env_file指令 docker-compose.yml variables.env * 项目根目录中的 *.env

  • 我希望能够在docker compose中使用env变量。yml,值在docker compose up时传入。这就是一个例子。 我今天用基本的docker run命令来做这件事,它包含在我自己的脚本中。有没有一种方法可以在没有任何bash包装器的情况下用compose实现它?

  • 问题内容: 我希望能够在docker-compose.yml中使用env变量,并在docker-compose时传入值。这就是例子。我今天使用基本的docker run命令来执行此操作,该命令包装在我自己的脚本中。没有任何这样的bash包装器,有没有办法通过compose实现它? 问题答案: 创建一个,这是您的with环境变量。 假设您的环境变量在文件“ env.sh”中 将以下代码放入sh文件中

  • 问题内容: 我正在尝试设置一个postgres容器,并希望使用以下命令设置postgres登录名: 所以我像这样创建了docker-compose.yml 我还尝试了将环境变量声明为db部分的其他语法: 但是这些选项似乎都不起作用,因为无论出于什么原因,无论何时我尝试使用各种连接字符串连接到postgres数据库: 与抱怨没有用户数据库相反,它们都给我身份验证失败。 问题答案: 您收到的身份验证错

  • 使用ec2插件为Jenkins上的耦合作业配置了自动从机。在连接到主服务器之前,我需要重写从服务器的几个环境变量。下面是init脚本,它在作为slave连接之前运行。我做错了什么。谁能帮帮我吗? Jenkins版本:1.656 Amazon EC2插件:1.31

  • 问题内容: 我非常喜欢使用docker-compose。 例如。在我的服务器上,当我想通过较小的更改来更新我的应用程序时,我只需要完美运行即可。 但是有时候,我需要重建(例如,我添加了一个npm依赖项,需要再次运行)。 在这种情况下,我愿意。 我希望这能: 创建我的容器的新实例 停止现有的容器(在较新的容器完成建造之后) 开始新的 (可选)删除旧的,但是可以手动完成 但是实际上,它似乎又重新启动了