对服务器上的容器进行端口映射:远程登录

bash 复制代码
#拉取镜像
sudo docker pull osrf/ros:foxy-desktop
#需要在镜像中安装好环境:
apt update
apt-get install -y openssh-server
apt-get install -y vim
apt-get install -y tmux
#设置配置文件
vim /etc/ssh/sshd_config
#文件修改内容
Port 22
PermitRootLogin yes
PasswordAuthentication yes
#重启ssh服务
service ssh restart
#查看容器名称
docker ps
#映射容器端口22到服务器端口37
sudo docker run -d -p 37:22 --name my_ros2_ssh ros2_ssh tail -f /dev/null
#例子:
#sudo docker run -d -p 37:22 --name my_container_name image_name tail -f 空设备文件
#其中, 使用 tail -f /dev/null 命令作为容器的主进程,它会阻塞并保持容器运行状态。/dev/null 是一个空设备文件,tail -f 命令会持续追踪该文件,实际上不会有任何输出。
#设置服务器上端口防火墙
sudo ufw status #查看状态
sudo ufw allow 37/tcp #允许使用37端口号
#设置容器的用户名和密码
adduser <username>
#将 `<username>` 替换为您希望设置的用户名。
#系统会提示您设置密码和其他相关信息。请根据提示输入密码并完成用户创建过程
#进入容器my_ros2_ssh
sudo docker exec -it my_ros2_ssh /bin/bash
#运行以下命令将用户添加到 sudo 组(将 "freja" 替换为你的用户名):
usermod -aG sudo freja
#避免远程登录freja后无法使用sudo权限,这一行不一定有用。。。不行就docker登录,在root中直接使用sudo指令。然后ssh登录,使用一些不需要sudo的指令。

配置好的容器保存为新的镜像

bash 复制代码
docker save -o <output-file-name>.tar <image-name>

其中:

  • <output-file-name> 是你要保存的输出文件的名称(包括路径),使用 .tar 扩展名,例如 myimage.tar
  • <image-name> 是要保存的镜像的名称或 ID。

例如,要保存名为 myimage 的镜像到 myimage.tar 文件中,可以运行以下命令:

bash 复制代码
docker save -o myimage.tar myimage

ssh登录

bash 复制代码
ssh -p 37 freja@xx.x.x.x
ssh -p 服务器被映射端口 容器用户名@<服务器地址>

VS Code 中遇到 "cannot open source file" 错误

尽管文件实际上存在,可能是因为编译器无法找到包含文件的路径。

要解决这个问题,你可以在 VS Code 中配置正确的包含路径。以下是一些可能的解决方法:

使用 c_cpp_properties.json 文件:在你的工作区中,可以创建一个名为 .vscode 的文件夹,并在其中创建一个名为 c_cpp_properties.json 的文件。在该文件中,添加以下内容

bash 复制代码
{
  "configurations": [
    {
      "name": "Linux",
      "includePath": [
        "${workspaceFolder}/**",
        "/opt/ros/foxy/include"  // 添加 ROS 2 的 include 路径
      ],
      "defines": [],
      "compilerPath": "/usr/bin/gcc",
      "cStandard": "gnu17",
      "cppStandard": "gnu++14",
      "intelliSenseMode": "gcc-x64"
    }
  ],
  "version": 4
}

确保将 /opt/ros/foxy/include 替换为你所使用的 ROS 2 版本的正确路径。

相关推荐
上海云盾安全满满2 分钟前
服务器如果做好日常维护,有什么作用
运维·服务器
正在走向自律5 分钟前
企业级数据库存储运维实战:表空间自动创建与存储架构深度优化
运维·数据库·架构·表空间
csdn_aspnet6 分钟前
.Net 解决 Web API 中的“服务器响应状态码为 405(方法不允许)”错误
服务器·.net·webapi
饼瑶23 分钟前
Isaac Sim 5.1.0 部署指南(实验室服务器)
服务器·仿真·具身智能
Agent产品评测局27 分钟前
图片生成智能体哪家好?2026年企业级视觉创作与自动化选型全景横评
运维·人工智能·ai·自动化
fetasty29 分钟前
chroot的Linux服务配置-当云服务器真正用起来
android·linux·服务器
猫头虎-人工智能31 分钟前
ToDesk ToClaw AI自动化实测:零门槛玩转日常自动化,告别折腾与硬件损耗
运维·人工智能·架构·开源·自动化·aigc·ai编程
实在智能RPA32 分钟前
Agent 能做流程的自动化监控吗?——深度拆解2026年AI智能体在企业级闭环监控中的技术实践
运维·人工智能·ai·自动化
翱翔-蓝天42 分钟前
WSL + Docker + GPU 安装 video-subtitle-remover 完整文档
运维·docker·容器
云飞云共享云桌面1 小时前
研发部门使用SolidWorks和ug,cad,设计共享云桌面应该怎么选?
运维·服务器·网络·人工智能·3d