-
Notifications
You must be signed in to change notification settings - Fork 5.9k
Support non-root users (runtime UID remapping) #640
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 14 commits
5427f06
9fe6c36
051b5ea
09c5556
908d293
1504dfd
42bb4da
efe1ca8
70424c8
4878c74
3190626
08ca5be
81ec63b
7ed7305
b328da9
dfce54b
b232cc5
daa96b8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,5 @@ | ||
/lib | ||
code-server | ||
node_modules | ||
dist | ||
out | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
# Docker launch commands for coder | ||
|
||
## default coder uid:guid | ||
docker run -it -p 127.0.0.1:8443:8443 \ | ||
-v "${PWD}/code-server:/home/coder/project" \ | ||
satlus-code-server:latest --allow-http --no-auth | ||
satlus marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
## passing `id(-g|-u)` through the system | ||
docker run -it -p 127.0.0.1:8443:8443 \ | ||
-v "${PWD}/code-server:/home/coder/project" \ | ||
-v "${PWD}/code-server/.cache:/home/coder/.cache" \ | ||
-v "${PWD}/code-server/.local:/home/coder/.local" \ | ||
-u $(id -u):$(id -g) \ | ||
satlus-code-server:latest --allow-http --no-auth | ||
satlus marked this conversation as resolved.
Show resolved
Hide resolved
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -34,14 +34,24 @@ RUN locale-gen en_US.UTF-8 | |
# configured in /etc/default/locale so we need to set it manually. | ||
ENV LC_ALL=en_US.UTF-8 | ||
|
||
RUN adduser --gecos '' --disabled-password coder && \ | ||
RUN addgroup --gid 1000 coder && \ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. by default the first user to be made in Docker build is 1000 already, I don't see the need for extra steps. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This is false. Docker does not enforce a default uid of 1000. The Node images that are being used as a base image however do create a That said, this doesn't need to create a new user for 1000:1000, I'm not sure what is up with all the other options in addition to that. The intention appears to be replacing |
||
adduser --uid 1000 --ingroup coder --home /home/coder --shell /bin/sh --disabled-password --gecos "" coder && \ | ||
echo "coder ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/nopasswd | ||
|
||
RUN USER=coder && \ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. use There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. gosu is actually preferred as it mirrors There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @sr229 @SuperSandro2000 this is setting temporary env vars for
Rather than add an additional config file externally. Has nothing to do with Just in case there is any confusion,
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @polarathene I was referring to sr229. |
||
GROUP=coder && \ | ||
curl -SsL https://github.com/boxboat/fixuid/releases/download/v0.4/fixuid-0.4-linux-amd64.tar.gz | tar -C /usr/local/bin -xzf - && \ | ||
chown root:root /usr/local/bin/fixuid && \ | ||
chmod 4755 /usr/local/bin/fixuid && \ | ||
mkdir -p /etc/fixuid && \ | ||
printf "user: $USER\ngroup: $GROUP\n" > /etc/fixuid/config.yml | ||
|
||
USER coder | ||
|
||
# We create first instead of just using WORKDIR as when WORKDIR creates, the user is root. | ||
RUN mkdir -p /home/coder/project | ||
RUN mkdir -p /home/coder/workdir | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is renaming the directory necessary here? I don't see any problem, but there might be documentation elsewhere which might go out of sync due to this change. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think it's a good idea, especially if we want to restrict container FS writes to the coder user. We're making the work directory a sub-path of the $HOME of the coder directory, as all docker instructions will be invoked as the coder user at this point. It also means that we can volume mount the /home/coder/project directory without risking masking/overwriting the entrypoint.sh script. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If you are creating a yet another directory, shouldn't one already existing be left alone as it is? If you are simply renaming it to something else in the same location then I am not sure what are you gaining from it, but I might be missing something. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. check my latest commit - the workdir is now used only to hold the entrypoint.sh script There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think you are missing my point here. There was a |
||
|
||
WORKDIR /home/coder/project | ||
WORKDIR /home/coder/workdir | ||
satlus marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
# This assures we have a volume mounted even if the user forgot to do bind mount. | ||
# So that they do not lose their data if they delete the container. | ||
|
@@ -50,4 +60,4 @@ VOLUME [ "/home/coder/project" ] | |
COPY --from=0 /src/packages/server/cli-linux-x64 /usr/local/bin/code-server | ||
EXPOSE 8443 | ||
|
||
ENTRYPOINT ["dumb-init", "code-server"] | ||
ENTRYPOINT ["dumb-init", "fixuid", "code-server"] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You might want to fix the title cases of headings and subheads to match with the style of the README file. Also, I personally do no like upper-case file extensions (as ignore patterns are easier if extensions are kept lower-cased) and CamelCased file names, but that could just me.