参考文档:
如何使用 Trae 连接到 Devbox 启动的 Docker
1 首先确保你的容器内有 OpenSSH 服务
以ubuntu系统为例,选择示例的其中一种方法即可。
1.1 Docker 示例1:使用dockerfile创建一个新容器
- 步骤1:创建容器可以将下面文件保存在一个bash脚本中,如trae-docker.sh
Bash
mkdir -p temp_docker
cat > temp_docker/Dockerfile <<'EOF'
FROM <your_image>
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo <'root:123'> | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
EOF
cd temp_docker
docker build -t <docker-image> .
启动 Docker 并暴露 SSH 服务:
-
<your_image>:替换为需要的基础镜像名称
-
<'root:123'>:设置root的账号密码,这里设置为123
-
<docker-image>:构建的docker的目标镜像名称
比如:我完整的trae-docker.sh文件是:
Bash
mkdir -p temp_docker
cat > temp_docker/Dockerfile <<'EOF'
FROM swr.cn-south-1.myhuaweicloud.com/ascendhub/cann:9.1.0-beta.1-950-ubuntu22.04-py3.12-devel
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:123' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
EOF
cd temp_docker
docker build -t trae-docker .
- 步骤2:执行trae-docker.sh
Bash
[jun@localhost jun]$ bash trae-docker.sh
Sending build context to Docker daemon 2.048kB
Step 1/7 : FROM swr.cn-south-1.myhuaweicloud.com/ascendhub/cann:9.1.0-beta.1-950-ubuntu22.04-py3.12-devel
---> db3ee0438d53
Step 2/7 : RUN apt-get update && apt-get install -y openssh-server
---> Running in 6925413c114b
Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [129 kB]
Hit:2 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [128 kB]
Get:4 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages [1312 kB]
Get:5 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [127 kB]
Get:6 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages [1615 kB]
Get:7 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages [7332 kB]
Get:8 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [4426 kB]
Get:9 http://security.ubuntu.com/ubuntu jammy-security/main amd64 Packages [4089 kB]
Get:10 http://archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages [7619 kB]
Get:11 http://archive.ubuntu.com/ubuntu jammy-backports/universe amd64 Packages [35.6 kB]
Get:12 http://archive.ubuntu.com/ubuntu jammy-backports/main amd64 Packages [82.8 kB]
...
...
...
---> 851ce430c82e
Step 3/7 : RUN mkdir /var/run/sshd
---> Running in daf7ff502b1f
Removing intermediate container daf7ff502b1f
---> b322c196eb4e
Step 4/7 : RUN echo 'root:123' | chpasswd
---> Running in d4f46c6cdcfe
Removing intermediate container d4f46c6cdcfe
---> 144bf3af6ce6
Step 5/7 : RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
---> Running in 444a1973aa70
Removing intermediate container 444a1973aa70
---> e574a8379422
Step 6/7 : EXPOSE 22
---> Running in d068032d1448
Removing intermediate container d068032d1448
---> 5af58666f4c5
Step 7/7 : CMD ["/usr/sbin/sshd", "-D"]
---> Running in 927d748a2e05
Removing intermediate container 927d748a2e05
---> 1efd925ac498
Successfully built 1efd925ac498
Successfully tagged trae-docker:latest
- 步骤3:启动 Docker 并暴露 SSH 服务
Bash
docker run -d -p2222:22 trae-docker
1.2 Docker 示例2:基于已有容器创建
- 步骤1:创建容器
Bash
docker run -itd --name <trae-docker> -p 2222:22 -e DISPLAY=$DISPLAY --dns 8.8.8.8 --dns 114.114.114.114 <osrf/ros:humble-desktop-full> /bin/bash
ssh默认端口是22,将2222映射到22使得本地能访问,DISPLAY=$DISPLAY为了docker显示图片,dns不设置的话docker里面ssh安装不上!
-
<trae-docker>:定义名称
-
<osrf/ros:humble-desktop-full>:基础镜像名称
完整命令如:
Bash
[jun@localhost jun]$ docker run -itd --name trae-docker-1 -p 2222:22 -e DISPLAY=$DISPLAY --dns 8.8.8.8 --dns 114.114.114.114 swr.cn-south-1.myhuaweicloud.com/ascendhub/cann:9.1.0-beta.1-950-ubuntu22.04-py3.12-devel /bin/bash
35abc26d0c3f870a41958720412bd55242b7ee65ae62d9520072b1a9b83c2fbe
- 步骤2:在docker里面安装ssh
进入容器
Bash
docker exec -it trae-docker-1 /bin/bash
安装ssh并启动sshd服务:
Bash
apt-get update
apt-get install -y openssh-server
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
echo 'root:123' | chpasswd
service ssh start
密码123可以自己改。
2 桌面IDE端进行连接验证
2.1 Docker 示例1:使用dockerfile创建一个新容器
69b25f901b6a是创建的容器,表明在容器是能够直接连通的。

2.2 Docker 示例2:基于已有容器创建
35abc26d0c3f是创建的容器,表明在容器是能够直接连通的。

3 桌面端IDE端,配置以下 ~/ssh/config
- 步骤1:在docker里面安装ssh
Plain
Host <linux>
HostName <10.x.x.x>
User <root>
Host <docker-container>
HostName <10.x.x.x>
Port 2222
User root
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
-
<linux>:linux服务器的名称,ip或者自定义命名都行
-
<root>:linux服务器账户名称和容器名称,可以是不同账户。
-
<10.x.x.x>:inux服务器的ip
-
<docker-container>:容器的名字,同样自定义命名就行。
比如配置如下:

步骤2:重启IDE
重启IDE后,就会看到"SSH连接目标"中看配置后的docker容器,然后连接:

不出意外的话,连接成功之后,如下:
69b25f901b6a是创建的容器,表明已连接成功了。

4 备注
关于以下2个选项的配置建议不配置,我这边配置后是连接失败的。
Bash
HostName localhost
ProxyJump A5