如何在docker容器中为每个不同的用户更新不同值的环境变量



首先,如果我需要谈论我想要做的情况,我有我用docker-compose.yml文件设置的docker容器。在这个docker映像中,还有2个用户("user1"one_answers"user2"),其中一个是"根"。用户。(我在Dockerfile中创建它们,到目前为止一切都很好)。为这些用户定义了一个环境变量。(echo $ env_val)。我希望这个变量对每个用户都有一个单独的值,并且我希望动态地管理这个值。换句话说,我想管理"环境"。在"docker- composition .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变量分配了我仅为根用户指定的值。但我希望我给的值只分配给我在图像中选择的用户。我没看到任何解决办法。为了满足这个需求,你有什么建议吗?

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

  • 我能够用我写的脚本将我想要的值分配给这个环境,但是当我用docker exec -it container_name bash登录到这个容器并使用我选择的su - user1登录时,我无法看到我分配的值。设置默认值。我的命令:docker exec -u 0 container_name /bin/bash -c "su - user1; source ~/.bash_profile; export env_val=34052"

  • 在运行时设置docker容器的环境变量

  • 该解决方案在映像创建阶段决定相关的环境。在我的示例中,我希望在创建映像文件时,在运行映像时更改该变量的值。同一服务的Docker不同环境变量

提前感谢您的帮助:)

尽管这不是一个适合我的解决方案,但我找到了一个方法。我写了一个新剧本。该脚本将环境变量的值作为参数进行更改。我正在把这个命令发送到主机上的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文件。然后,我可以启动应用程序,我将在我想要的配置中运行。

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

最新更新