Docker 工具链
为了在 Docker 容器中进行开发,CLion 通过专用的 Docker 工具链 提供了完整的 Docker 集成。 观看此视频以了解更多信息:
示例 Dockerfile
为了帮助您开始在 CLion 中进行 Docker 开发,我们为基于 Ubuntu 的镜像创建了一个 示例 Dockerfile。 您可以将此文件复制到您的项目中并根据需要进行调整,或者仅将其用作参考。
示例文件包括以下行和部分:
在顶部的注释中,您可以找到用于 构建容器的命令。
FROM ubuntu:20.04行指向容器的基础镜像。apt-get部分将所有工具链依赖项安装到容器中。 在这里,您可以调整工具及其版本。
构建容器
从 Dockerfile 顶部运行
docker build命令:docker build -t clion/ubuntu/cpp-env:1.0 -f Dockerfile.cpp-env-ubuntu .根据您的平台和 Docker 设置,您可能需要使用
sudo运行它。此命令将构建具有适当工具链依赖项的 Ubuntu 基础镜像。
创建 Docker 工具链
转到 。
点击
并选择 Docker:

点击 服务器 字段旁的齿轮按钮以添加 Docker 镜像:

您还可以在 中配置一个 Docker 服务器,然后在工具链设置中选择它。
选择 Docker 镜像并等待工具检测完成。

使用 容器设置 字段提供其他容器设置,例如端口和卷绑定:

使用 Docker 工具链进行构建、运行和调试
配置 Docker 工具链后,您可以在 CMake 配置文件或 Makefile 设置 中选择它。 或者,将工具链移到列表顶部以将其设为默认。

项目文件夹将被挂载到 Docker 容器中,并在其中执行构建/运行/调试。
默认情况下,项目文件夹被挂载到容器中的 /tmp 文件夹。 但是,如果在 工具链 中指定了路径映射,CLion 将使用这些映射。
例如,如果项目根目录是 /data/code/project ,工具链路径映射是 /data/code -> /代码 ,那么 CLion 将重用此映射,并且不会将项目挂载到 /tmp/project 。
CLion 将启动容器并在命令执行后关闭它。
SELinux 上的绑定挂载
您可以向 Docker 绑定挂载添加 :z 配置标志,以将文件和文件夹连接到在启用 SELinux 的工作站上运行的容器。 这允许 CMake 和其他工具访问您的项目文件以及系统上的其他文件。
转到 。
选中相应的复选框:

提高 Windows 上 Docker 工具链的性能
为了在 Windows 上获得更好的性能,我们建议使用带有 WSL 2 后端的 Docker。
在 Docker 桌面应用程序中,导航到 并启用与您的 WSL 分发版(例如,
ubuntu-20.04)的集成。将项目源文件放入 WSL 文件系统中(例如, \\wsl$\ubuntu-20.04\tmp\llvm ),然后在 CLion 中打开它并配置 Docker 工具链。
为 WSL 中的 Docker 启用调试输出
要在 WSL 中使用 Docker 工具链进行调试时获取调试输出,您需要在 wsl.conf 中进行更改。
打开 WSL shell。
打开 wsl.conf 文件进行编辑:
sudo $EDITOR /etc/wsl.conf添加以下行:
[automount] root = /mnt crossDistro = true options = "metadata"保存更改。
重启 WSL。 您可以通过运行
wsl -t <distribution_name>来完成此操作。
替代工作流:使用远程和本地源在 Docker 中开发
在这种情况下,基于 Docker 的工具链通过 Remote with local sources 配置。 容器应运行一个 SSH 守护进程。
远程场景的示例 Dockerfile
使用 remote-cpp-env 示例文件。 它包括两个附加部分:
ssh部分设置了 CLion 的 SSH 连接。user部分在容器中创建了一个用户。
1. 构建容器
使用 Dockerfile 顶部的
docker build行:docker build -t clion/remote-cpp-env:0.5 -f Dockerfile.remote-cpp-env .根据您的平台和 Docker 设置,您可能需要使用
sudo运行它。此命令将构建具有适当工具链依赖项的 Ubuntu 基础镜像,设置 SSH 并创建用户。
2. 运行容器
使用下一个命令,
docker run:docker run -d --cap-add sys_ptrace -p127.0.0.1:2222:22 --name clion_remote_env clion/remote-cpp-env:0.5在此行中,
-d以守护进程方式运行容器,--cap-add sys_ptrace添加了ptrace功能,这是调试所必需的。-p部分指定了端口映射。 它将容器内的默认 SSH 端口(22)暴露为主机环境上的端口 2222。 您可以在此处指定任何可用的端口号。(可选)您可以使用
-v标志创建映射卷:-v /local/path/to/project:/remote/path/to/project之后,转到 ,将连接类型更改为 本地或已挂载的文件夹 ,并设置路径映射。 请参阅 Remote with local sources:检查并调整部署配置。
3. 清除缓存的 SSH 密钥
构建和运行容器的最后一步是
ssh-keygen命令,它会清除任何缓存的 SSH 密钥。 这很重要,因为本地主机端口只是临时映射,可以被不同的容器重复使用。ssh-keygen -f "$HOME/.ssh/known_hosts" -R "[localhost]:2222"
4. 创建远程主机工具链
此时,容器正在运行一个 SSH 服务器守护进程,您可以使用 CLion 的标准远程开发功能连接到它。
请按照 创建远程工具链的一般说明操作。
在 凭据 字段中设置 SSH 配置:
主机 - localhost
端口 - 2222
用户名/密码 - 如 Dockerfile 中指定
建立连接后,CLion 会尝试检测工具链。 由于工具已安装在默认位置,它们将被自动检测到。
如果您更改了 Dockerfile 中的
apt-get部分以将工具安装到其他位置,请在 生成、 C 编译器、 C++ 编译器 和 调试器 字段中提供路径。创建一个使用远程工具链的 CMake 配置文件。 等待项目重新加载。
文件传输到容器后,您将能够在运行/调试配置切换器中选择配置文件,以使用指定的工具链在容器内构建、运行或调试代码。