You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"]

操作步骤

  1. 在WSL2终端进入项目根目录
  2. 构建镜像:docker build -t cpp-demo .
  3. 运行容器:docker run cpp-demo
  4. 修改主机src/main.cpp里的代码后,重新执行构建和运行命令,就能看到更新后的结果。

扩展提示

如果后续要加独立ASIO,只需在构建阶段添加安装命令:

# 在builder阶段加入
RUN apt-get update && apt-get install -y libasio-dev

之后编译时按需链接ASIO库即可。

内容的提问来源于stack exchange,提问作者Ilya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:12:39