WSL2环境下Docker容器化运行C++程序的问题解决与实现
WSL2下Docker容器化最小C++程序实现
背景
刚学Docker两周,只跟着官网入门教程走了一遍,对实际操作原理摸得不太透。最近需要在Windows10的WSL2环境里,用Docker运行一个最小C程序,要求能支持标准C库,后续还得能引入独立ASIO这类外部库。
踩过的坑及解决方法
- 包版本不兼容:一开始照搬网上的Dockerfile构建,遇到
boost1.80-dev包找不到、cmake版本冲突的问题。后来换用gcc:12作为基础镜像,这个镜像自带的cmake版本和系统库版本匹配,直接解决了版本矛盾。 - COPY路径错误:调整cmake版本后,构建时提示文件找不到,排查后发现多阶段构建的每个阶段都是独立文件系统,之前的COPY路径没对应到当前阶段的上下文。修正时确保每个需要文件的阶段,要么从主机正确指定路径COPY,要么从前面的构建阶段通过
COPY --from=xxx复制产物。
最终可运行的方案
项目结构
./ ├── src/ │ └── main.cpp └── Dockerfile
示例C++代码(src/main.cpp)
#include <iostream> int main() { std::cout << "Hello Dockerized C++!" << std::endl; return 0; }
Dockerfile(支持后续扩展外部库)
# 构建阶段:用gcc镜像提供完整编译环境,支持C++标准库,后续可安装第三方库 FROM gcc:12 AS builder WORKDIR /app # 复制主机源码到容器构建目录 COPY src/ ./src/ # 直接用g++编译,后续引入外部库可改用cmake RUN g++ -std=c++20 src/main.cpp -o app # 运行阶段:用轻量级debian镜像减小最终镜像体积 FROM debian:bookworm-slim # 从构建阶段复制编译好的程序到运行镜像 COPY --from=builder /app/app /usr/local/bin/ # 设置容器启动命令 CMD ["app"]
操作步骤
- 在WSL2终端进入项目根目录
- 构建镜像:
docker build -t cpp-demo . - 运行容器:
docker run cpp-demo - 修改主机
src/main.cpp里的代码后,重新执行构建和运行命令,就能看到更新后的结果。
扩展提示
如果后续要加独立ASIO,只需在构建阶段添加安装命令:
# 在builder阶段加入 RUN apt-get update && apt-get install -y libasio-dev
之后编译时按需链接ASIO库即可。
内容的提问来源于stack exchange,提问作者Ilya
相关产品推荐
相关产品推荐

