linux - 如何为容器的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 用户指定的值。但我希望我给的值只分配给我在图像中选择的用户。我没有看到任何解决方案。你对我有什么建议可以满足这个需求吗?
注意:我尝试了这些解决方案
我可以使用我编写的脚本将我想要的值分配给这个环境,但是当我
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 容器。
#!/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 文件。之后,我可以启动我将在我想要的配置中运行的应用程序。
因此,当我用这个用户登录时,我想要的配置就完成了。最后,当我停止或删除容器时,我的图像不受此更改的影响。
推荐阅读
- r - 如何生成一个 svytableone,它显示按 z 分组的 x 的数量?
- python - python将值插入MySQL-.DatabaseError:1366(HY000):字符串值不正确:'\ x92
- javascript - React Router 不会在道具上重新渲染相同的组件
- python - 脏话过滤器无法加载 Spacy 模型“en”
- python - Kivy:尝试加载远程 mp4 时,Gstreamer 插件不起作用
- cookies - cakePHP中间件中如何设置默认cookie参数
- svg - 我如何创建一个结合了 feTurbulence 和 feGaussianBlur 的 svg 过滤器
- c# - VS Code 中用于 Unity 的 Visual Studio 工具?
- git - 尝试使用 https 将存储库克隆到 NetBeans 时凭据不正确
- gcc - 在 64 位 (x86-64) 机器上构建 32 位 (x86) gcc-10.2.0 时出错