# ================================================================= # Edge Proxy - Development Environment Dockerfile (V3 - Corrected) # ================================================================= FROM arm64v8/ubuntu:22.04 # 1. 基础环境设置 # ================================= WORKDIR /app ENV DEBIAN_FRONTEND=noninteractive # 2. 用户和组创建 # 说明: 在这里创建所有需要的用户和组。 # 权限将在主机端设置,而不是在Dockerfile中,因为工作目录/app将被主机目录挂载覆盖。 # ================================= # ================================= RUN groupadd -r developers && \ # 创建 'dev' 用户并添加到 'developers' 和 'sudo' 组 useradd -ms /bin/bash -g developers -G sudo dev && \ # 添加用户到 'dialout' 组 (GID 20) 以便访问串口设备 # `|| true` 用于防止在 GID 已存在时出错 groupadd -g 20 dialout || true && \ usermod -a -G dialout dev && \ # 为 'dev' 用户设置无密码 sudo echo "dev ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/dev-nopasswd && \ # 清理 apt 缓存 rm -rf /var/lib/apt/lists/* RUN echo "umask 0002" > /etc/profile.d/99-shared-umask.sh && \ chmod +x /etc/profile.d/99-shared-umask.sh # 3. 复制构建上下文并安装依赖 # 说明: 将整个项目复制到临时目录,用于编译 paho 等库。 # ================================= COPY . /tmp/build-context RUN apt-get update && \ apt-get install -y --no-install-recommends \ build-essential \ cmake \ git \ gdb \ vim \ libssl-dev \ # spdlog 开发库 libspdlog-dev \ # Boost C++ 开发库 (元数据包) libboost-all-dev && \ \ # --- 从源码编译并安装 Paho MQTT C 库 --- echo "--- Building and installing Paho MQTT C Library ---" && \ cd /tmp/build-context/external/paho.mqtt.c && \ cmake -Bbuild -H. \ -DPAHO_WITH_SSL=ON \ -DPAHO_BUILD_SAMPLES=OFF \ -DPAHO_BUILD_DOCUMENTATION=OFF && \ cmake --build build --target install && \ \ # --- 从源码编译并安装 Paho MQTT C++ 库 --- echo "--- Building and installing Paho MQTT C++ Library ---" && \ cd /tmp/build-context/external/paho.mqtt.cpp && \ cmake -Bbuild -H. -DPAHO_WITH_SSL=ON -DPAHO_BUILD_SAMPLES=OFF -DPAHO_BUILD_DOCUMENTATION=OFF && \ cmake --build build --target install && \ \ # --- 清理工作 --- # 刷新动态链接库缓存 ldconfig && \ # 删除临时的构建上下文,减小镜像体积 rm -rf /tmp/build-context && \ # 清理apt缓存,减小镜像体积 rm -rf /var/lib/apt/lists/* USER dev # 4. (可选) 设置默认用户 # 说明: 如果不设置,默认是 root。如果希望容器启动后默认是某个用户,可以取消下面的注释。 # 但对于 VSCode attach 来说,它会使用 devcontainer.json 中指定的 remoteUser,所以此项不是必须的。 # USER forlinx # CMD ["sleep", "infinity"]