如何使用CLion在Docker容器中编码/运行程序?

syk*_*yko 7 docker clion

我是CLion的新手

我发现CLion支持Docker。我要执行以下操作:

(Refer my Linux OS as A.)
(Refer the docker container within A as B.)


The library and environments are set up in B.
The CLion IDE is running in A.
I want to code/debug the program that runs in B using the IDE in A. 
Run Code Online (Sandbox Code Playgroud)

这是CLion支持的功能吗?我阅读了他们的文档,但找不到解决方法

谢谢

Inc*_*tic 16

截至2018年末,CLion中的远程开发非常容易设置。我们要做的就是将一个Docker容器设置为我们的“远程主机”。


我使用https://github.com/shuhaoliu/docker-clion-dev上的指南作为参考,并进行了一些更改。这对我有用:

(可选)如果您没有安装CLion的Docker插件,请按照以下说明进行操作

第1步-Dockerfile

修改此Dockerfile以安装项目需要的所有依赖项。将Dockerfile添加到您的项目中。

FROM ubuntu:cosmic

########################################################
# Essential packages for remote debugging and login in
########################################################

RUN apt-get update && apt-get upgrade -y && apt-get install -y \
    apt-utils gcc g++ openssh-server cmake build-essential gdb gdbserver rsync vim 

RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd

ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

# 22 for ssh server. 7777 for gdb server.
EXPOSE 22 7777

RUN useradd -ms /bin/bash debugger
RUN echo 'debugger:pwd' | chpasswd

########################################################
# Add custom packages and development environment here
########################################################

########################################################

CMD ["/usr/sbin/sshd", "-D"]

Run Code Online (Sandbox Code Playgroud)

第2步-Docker Compose

在与之前的docker文件相同的目录中,创建docker-compose.yaml文件。

# From: https://github.com/shuhaoliu/docker-clion-dev/blob/master/docker-compose.yml

version: '3'

services:
  gdbserver:
    build:
      context: ./
      dockerfile: ./Dockerfile
    image: clion_dev
    security_opt:
      - seccomp:unconfined
    container_name: debug
    ports:
      - "7776:22"
      - "7777:7777"
    volumes:
      - .:/home/debugger/code
    working_dir: /home/debugger/code
    hostname: debug

Run Code Online (Sandbox Code Playgroud)

第三步

确保Dockerfiledocker-compose.yml文件位于同一目录中。

选项3A(带有CLion Docker插件)

右键单击该docker-compose.yml文件,然后选择Run

在此处输入图片说明

一两分钟后,应创建容器,并可以从Clion的Docker选项卡中查看该容器。

在此处输入图片说明

选项3B(不带CLion Docker插件)

在包含Dockerfiledocker-compose.yml文件的目录中,运行:

docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

第4步-配置工具链

打开设置->构建,执行,部署->工具链,然后创建一个新的远程主机工具链。

在“ 凭据”字段中,单击右侧的小文件夹,然后输入在Dockerfile中创建的调试器用户的凭据。

在上面的示例中,用户名是“ debugger”,密码是“ pwd”。

远程工具链

第5步-CMake配置文件

现在,我们必须设置一个CMake配置文件以使用我们的新远程主机工具链。

导航到设置->构建,执行,部署-> Cmake并创建一个新的配置文件。唯一必要的更改是选择在上一步中创建的工具链。

CMake简介

第6步-运行/调试程序

从CMake选项卡中,确保已选择新创建的CMake配置文件。

在此处输入图片说明

将CMake项目加载到容器中之后,您应该能够在CLion右上角的运行配置切换器中选择要使用的CMakeProfile。

在此处输入图片说明

希望如果一切顺利,您现在应该可以在Docker容器中运行和调试代码!


如果事情不是很按计划进行,那么以下参考可以帮助我使事情顺利进行: