linux 使用入口点创建的用户在容器中运行VScode

ruarlubt  于 2023-01-08  发布在  Linux
关注(0)|答案(1)|浏览(107)

我有一个容器,它在启动时创建一个用户,使用正确的UID/GID(这个docker可用于开发团队,他们可能不共享相同的ID)。为了让他们编译/访问源文件,有必要在容器中有一个与主机用户具有相同ID的用户。
创建用户的入口点部分如下所示:

if ! id -u "${USER_ID}"; then
    adduser \
        --disabled-password \
        --gecos "Docker Builder" \
        --gid "${USER_GID}" \
        --uid "${USER_ID}" \
        --shell /bin/bash \
        --home "${USER_HOME}" \
        "${USER_NAME}"
fi

其中变量由docker exec -e给出
到目前为止,我只将VScode附加到运行的容器上,并且为这个容器ID指定remoteUser就足够了,但是使用这种附加到容器上的方式,我无法在一个容器上打开多个VScode窗口,为了实现这一点,我必须使用devcontainer.json
我查看了文档,但找不到一种方法来告诉devcontainer.json连接到容器中尚未定义的用户。
或者换句话说,我可以在运行时更改用户吗?
这就是我目前所做的。

  • tasks.json
"inputs": [
  {
      "id": "get_uid",
      "type": "command",
      "command": "shellCommand.execute",
      "args": {
          "command": "id -u",
          "useFirstResult": true
      }
  },
  {
      "id": "get_gid",
      "type": "command",
      "command": "shellCommand.execute",
      "args": {
          "command": "id -g",
          "useFirstResult": true
      }
  }
]
  • devcontainer.json
"image": "myDocker",
"forwardPorts": [3000],
// Emulate : docker exec -e
"containerEnv": {
  "LOCAL_USER_NAME" : "vscode",
  "LOCAL_USER_HOME" : "/home/vscode",
  "LOCAL_USER_ID" : "${input:get_uid}",
  "LOCAL_USER_GID" : "${input:get_gid}"
},
"overrideCommand": false

我不想更改/覆盖Dockerfile,因为这会破坏独立于UID/GID创建单个容器的机制。
也许我错过了什么,或者我看错了方向?

kulphzqa

kulphzqa1#

多亏了@DavidMaze给我指明了正确的方向,我终于让它发挥了作用。
我改变了我的entrypoint和我的Dockerfile
现在,我在Dockerfile中创建了一个通用用户,并在入口点更改了它的uid/gid(如果需要)。
这允许我从devcontainer.json使用runArgs,并让VScode处理它自己的entrypoint

"image": "myDocker",
  "forwardPorts": [3000],
  "runArgs": [
    "--user=user"
  ]

我在这里不再使用tasks.json,但是我现在知道如何进行一些动态替换。
谢啦,谢啦

相关问题