首页 > 解决方案 > 如何为容器的docker容器中的每个不同用户更新不同值的环境变量正在运行

问题描述

首先,如果我需要谈谈我想做的情况,我有我用docker-compose.yml文件设置的 docker 容器。在这个 docker 镜像中,还有 2 个用户(“user1”和“user2”),其中一个是“root”用户。(我在 中创建它们Dockerfile,到目前为止一切都很好)。为这些用户定义了一个环境变量。(回声 $env_val)。我希望这个变量对每个用户都有一个单独的值,并且我想动态地管理这个值。换句话说,我想以用户为基础管理“docker-compose.yml”中使用的“环境”变量。

version: '3'
services:
   app1:
      image: image1
      enviromnet:
         - env_val=34052    # this value default 34034 but for user1 value is assing 34052
      entrypoint: /bin/sh/ start_container.sh

   app2:
      image: image1
      enviromnet:
         - env_val=34028    # this value default 34028 but for user2 value is assing 34028
      entrypoint: /bin/sh/ start_container.sh

我的docker-compose.yml文件是这样的。此处的env_val变量被分配了我仅为 root 用户指定的值。但我希望我给的值只分配给我在图像中选择的用户。我没有看到任何解决方案。你对我有什么建议可以满足这个需求吗?

注意:我尝试了这些解决方案

预先感谢您的帮助 :)

标签: linuxdocker-composeenvironment-variablesdocker-container

解决方案


尽管这不是适合我的解决方案,但我找到了一种方法。我写了一个新脚本。该脚本采用我将更改的环境变量的值作为参数。我将此命令发送到主机上的 docker 容器。

#!/bin/bash

docker exec -u 0 container_name /bin/bash -c "echo export env_val=$1 >> /home/user1/.bash_profile; su - user1; source ~/.bash_profile; <run_another_command>"

此命令将我需要的命令附加到正在运行的容器中我想要的用户的 .bash_profile 的末尾。它还使用我想要的用户登录并获取 .bash_profile 文件。之后,我可以启动我将在我想要的配置中运行的应用程序。

因此,当我用这个用户登录时,我想要的配置就完成了。最后,当我停止或删除容器时,我的图像不受此更改的影响。


推荐阅读