2 changed files with 68 additions and 0 deletions
@ -0,0 +1,36 @@
|
||||
FROM rust:1.90.0 |
||||
|
||||
# Install basic development tools |
||||
RUN apt-get update && apt-get install -y \ |
||||
build-essential \ |
||||
gdb \ |
||||
git \ |
||||
procps \ |
||||
sudo \ |
||||
&& rm -rf /var/lib/apt/lists/* |
||||
|
||||
# Create developer user with host UID/GID |
||||
ARG USER_UID=1000 |
||||
ARG USER_GID=1000 |
||||
ENV USER_UID=${USER_UID:-1000} |
||||
ENV USER_GID=${USER_GID:-1000} |
||||
RUN groupadd -g $USER_GID developer \ |
||||
&& useradd -u $USER_UID -g $USER_GID -m developer \ |
||||
&& mkdir -p /workspace \ |
||||
&& chown developer:developer /workspace |
||||
|
||||
RUN echo 'developer ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/developer \ |
||||
&& chmod 0440 /etc/sudoers.d/developer |
||||
|
||||
RUN mkdir -p /home/developer/.vscode-server \ |
||||
&& chown -R developer:developer /home/developer/.vscode-server |
||||
|
||||
# Switch to developer user |
||||
USER developer |
||||
|
||||
|
||||
# Set up cargo path |
||||
ENV PATH="/home/developer/.cargo/bin:${PATH}" |
||||
|
||||
# Set default workspace directory |
||||
WORKDIR /workspace |
||||
@ -0,0 +1,32 @@
|
||||
{ |
||||
"name": "Rust Development", |
||||
"build": { |
||||
"dockerfile": "Dockerfile", |
||||
"args": { |
||||
"USER_UID": "${localEnv:UID:1000}", |
||||
"USER_GID": "${localEnv:GID:1000}" |
||||
} |
||||
}, |
||||
"remoteUser": "developer", |
||||
"customizations": { |
||||
"vscode": { |
||||
"extensions": [ |
||||
"rust-lang.rust-analyzer", |
||||
"fill-labs.dependi", |
||||
"vadimcn.vscode-lldb" |
||||
], |
||||
"settings": { |
||||
"rust-analyzer.checkOnSave": true |
||||
} |
||||
} |
||||
}, |
||||
"runArgs": [ |
||||
"--name", |
||||
"${localEnv:USER}-${localWorkspaceFolderBasename}-rust-dev", |
||||
"--mount", |
||||
"type=volume,source=vscode-extensions,target=/home/developer/.vscode-server/extensions" |
||||
], |
||||
"postStartCommand": "sudo chown -R $(id -u):$(id -g) ~/.vscode-server || true", |
||||
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind", |
||||
"workspaceFolder": "/workspace" |
||||
} |
||||
Loading…
Reference in new issue