【发布时间】:2017-08-15 15:57:19
【问题描述】:
我有一个已配置为运行代码的 OpenSuse 42.3 docker 映像。该映像有一个名为“myuser”的用户(除 root 用户),我在初始映像生成期间通过 Dockerfile 创建该用户。我有三个脚本文件,它们根据用户使用的操作系统从图像生成容器。
问题:容器中的用户名“myuser”能否设置为执行容器生成脚本的用户的用户名?
我的目标是让用户以交互方式进入容器并能够从容器内运行代码。该代码只是一个执行并具有一些 IO 的单个二进制文件,因此我希望可以从容器内访问用户的目录,以便他们可以导航到他们机器上的文件夹并运行代码以在他们的文件系统中生成输出。
以下是我到目前为止所构建的。我尝试在 linux 脚本调用docker run 期间设置 USER 环境变量,但这并没有将用户从“myuser”更改为“bob”(启动容器的主机上的用户名)。目录的安装似乎工作正常。我不确定是否有可能实现我的目标。
Linux 容器脚本:
username="$USER"
userID="$(id -u)"
groupID="$(id -g)"
home="${1:-$HOME}"
imageName="myImage:ImageTag"
containerName="version1Image"
docker run -it -d --name ${containerName} -u $userID:$groupID \
-e USER=${username} --workdir="/home/myuser" \
--volume="${home}:/home/myuser" ${imageName} /bin/bash \
Mac 容器脚本:
username="$USER"
userID="$(id -u)"
groupID="$(id -g)"
home="${1:-$HOME}"
imageName="myImage:ImageTag"
containerName="version1Image"
docker run -it -d --name ${containerName} \
--workdir="/home/myuser" \
--v="${home}:/home/myuser" ${imageName} /bin/bash \
Windows 容器脚本:
ECHO OFF
SET imageName="myImage:ImageTag"
SET containerName="version1Image"
docker run -it -d --name %containerName% --workdir="/home/myuser" -v="%USERPROFILE%:/home/myuser" %imageName% /bin/bash
echo "Container %containerName% was created."
echo "Run the ./startWindowsLociStream script to launch container"
【问题讨论】:
-
为什么这个问题被否决了?
-
很高兴知道它。赞成
-
至少对于 linux 脚本来说,提供
-u $userID:$groupID就像你正在做的那样,应该足以让容器在宿主文件系统中写入人员。您在那里遇到的确切问题是什么?
标签: linux bash docker scripting