# 1. Root 用户下场:负责搞地基、装系统级软件
FROM mcr.microsoft.com/devcontainers/base:ubuntu-24.04
# 切换到 root 执行系统级命令
USER root
# ==========================================
# A. 安装常用的底层工具和依赖
# ==========================================
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
&& apt-get install -y \
git \
iputils-ping \
net-tools \
curl \
wget \
zip \
unzip \
ripgrep \
jq \
build-essential \
ca-certificates \
gnupg \
# 安装 JDK 所需的字体库和依赖 (避免无头模式下某些报错)
fontconfig \
locales \
# 安装 SSH 并修改配置允许密码登录
openssh-server \
&& sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/g' /etc/ssh/sshd_config \
&& apt-get clean -y && rm -rf /var/lib/apt/lists/*
# ==========================================
# B. 安装 Amazon Corretto 21 (使用 SDKMAN 方案)
# ==========================================
# 设定 SDKMAN 目录
ENV SDKMAN_DIR="/usr/local/sdkman"
# 一键安装 SDKMAN,并通过它安装 Amazon Corretto 21
RUN curl -s "https://get.sdkman.io" | bash \
&& bash -c "source $SDKMAN_DIR/bin/sdkman-init.sh \
&& sdk install java 21.0.3-amzn \
&& sdk install maven 3.9.6"
# 注意:我把 MAVEN 也放进 SDKMAN 里一起装了,这是 Java 圈最推荐的做法,自动配好环境变量!
# 把 Java 和 Maven 的路径加到全局环境变量里,确保所有用户都能用
ENV JAVA_HOME="/usr/local/sdkman/candidates/java/current"
ENV MAVEN_HOME="/usr/local/sdkman/candidates/maven/current"
ENV PATH="$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH"
# ==========================================
# C. 收尾工作
# ==========================================
# 确保工作目录属于 vscode 用户
ARG USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=1000
RUN mkdir -p /workspaces && chown -R ${USER_UID}:${USER_GID} /workspaces
# 给我们的 vscode 用户设定一个密码 (你可以把 123456 改成你想要的)
RUN echo "vscode:123456" | chpasswd
# 开放 22 端口
EXPOSE 22
# 切回普通用户 (这是容器的最终默认用户)
#USER vscode
COPY setup.sh /tmp/
# 让 SSH 在前台一直跑,Docker 就绝不会自动停止了!
#docker run --rm -it heyaotang/devcontainers:ubuntu-24.04-260417A tail -f /dev/null
#docker exec -it fc7959460b7237c6c64217547b77d3968da98ed91ebe31b3a5ce11018ebba39f /bin/bash
#docker cp .claude fc7959460b7237c6c64217547b77d3968da98ed91ebe31b3a5ce11018ebba39f:/tmp/.claude/
CMD ["echo", "hello"]
#!/bin/bash
set -e
echo "🚀 以普通用户身份配置用户级环境..."
# ==========================================
# NVM + Node.js 22 + NRM (这些必须在用户目录下)
# ==========================================
echo "🟢 安装 NVM 和 Node.js 22..."
# 安装 nvm 到用户目录
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 加载 nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# 安装 Node 22 并设为默认
nvm install 22
nvm alias default 22
echo "Node 版本: $(node -v)"
echo "NPM 版本: $(npm -v)"
# 安装 nrm 并切换淘宝镜像
echo "🚀 安装 nrm 并切换淘宝镜像..."
npm install -g nrm
nrm use taobao
npm i -g @anthropic-ai/[email protected]
echo "✅ 用户级环境配置完毕!准备开始战斗!"
{
"name": "Safe & Ultimate Dev Environment",
"build": {
"dockerfile": "Dockerfile"
},
// 指定容器内用户的 UID 和 GID,与本地用户对齐,避免权限错乱
"remoteUser": "vscode",
"containerUser": "vscode",
"updateRemoteUserUID": true,
// 以 vscode 用户身份执行安装脚本
"postCreateCommand": "bash .devcontainer/setup.sh",
// 常用的 VS Code 插件,会自动安装到容器里
"customizations": {
"vscode": {
"extensions": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"vscjava.vscode-java-pack"
]
}
}
}
Content type
Image
Digest
sha256:fcbc73329…
Size
739.7 MB
Last updated
5 months ago
docker pull heyaotang/devcontainers:ubuntu-24.04-260417B