如何区分容器世界中的 Terraform 用户?
How To Distinguish Between Terraform Users In Container World?
根据我的测试,Terraform 似乎记录了谁用 user@hostname
锁定了状态文件。我们正在容器中切换到 运行 Terraform。这意味着每个人都将显示为同一用户。例如,如果在我们的 Dockerfile 中定义用户 myuser
,那么通过相应容器运行 Terraform 的每个人都将显示为 myuser@containerhostname
。如果是这样的话,我们将不知道谁锁定了状态文件。
有没有办法解决这个问题?
最后,这变成了如何将 运行 容器作为主机用户 Docker 的问题,因为我没有看到将其配置为 Terraform 中的设置的方法。因此,我的解决方案是为 运行 用户提供一个包装脚本,运行 将容器作为他们的主机用户。
示例摘录:
#!/bin/bash
...
#if machine is Linux then passwdLocation=/etc/passwd
if [ "$machine" = "Mac" ]; then
echo "$USER:x:$(id -u):$(id -g):HostUser,,,:$HOME:/bin/bash" > /tmp/mac_passwd
passwdLocation="/tmp/mac_passwd"
fi
docker run \
--user=$(id -u):$(id -g) \
-v $passwdLocation:/etc/passwd:ro \
...
根据我的测试,Terraform 似乎记录了谁用 user@hostname
锁定了状态文件。我们正在容器中切换到 运行 Terraform。这意味着每个人都将显示为同一用户。例如,如果在我们的 Dockerfile 中定义用户 myuser
,那么通过相应容器运行 Terraform 的每个人都将显示为 myuser@containerhostname
。如果是这样的话,我们将不知道谁锁定了状态文件。
有没有办法解决这个问题?
最后,这变成了如何将 运行 容器作为主机用户 Docker 的问题,因为我没有看到将其配置为 Terraform 中的设置的方法。因此,我的解决方案是为 运行 用户提供一个包装脚本,运行 将容器作为他们的主机用户。
示例摘录:
#!/bin/bash
...
#if machine is Linux then passwdLocation=/etc/passwd
if [ "$machine" = "Mac" ]; then
echo "$USER:x:$(id -u):$(id -g):HostUser,,,:$HOME:/bin/bash" > /tmp/mac_passwd
passwdLocation="/tmp/mac_passwd"
fi
docker run \
--user=$(id -u):$(id -g) \
-v $passwdLocation:/etc/passwd:ro \
...