当前位置: 首页 > news >正文

使用docker在manjaro linux系统上运行windows和ubuntu

因为最近项目必须要使用指定版本的solidworks和maxwell(都只能在win系统上使用), 且目前的ubuntu容器是没有桌面的,导致我运行不了一些带图形的ros2功能。无奈之下,决定使用docker-compose写一下配置文件,彻底解决问题。

docker的基本操作和ros2安装看这篇文章的第一、二个专题:

实验环境搭建集锦-CSDN博客


dockerfile和docker-compose.yml的区别

dockerfile构建镜像,但没有运行镜像。需要用docker run运行

docker-compose.yml构建镜像也运行镜像,更适合多个镜像容器的编辑。编辑后直接使用 sudo docker compose up构建并运行(前提:默认文件名为docker-compose.yml)


使用docker-compose.yml安装windows-in-docker

建立一个docker-compose-win.yml文件

version: "3"
services:windows:image: dockurr/windowscontainer_name: windowsdevices:- /dev/kvmcap_add:- NET_ADMINports:- 8006:8006- 3389:3389/tcp- 3389:3389/udpstop_grace_period: 2mrestart: on-failureenvironment:VERSION: win10RAM_SIZE: 8GCPU_CORES: 4DISK_SIZE: 100G

尽量不要使用下面的目录挂载,没啥用不说,还总给报错。而且putty或者filezilla也是不管用的,因为docker容器本质上都是linux系统,只不过运行的可能会是win/ubuntu/其他。

    volumes: - /mnt/sharedisk/win10:C:\\User

这里开命令行证实一下,docker容器里并没有C:\\User这种路径,只有

如果在主机上运行docker cp,主机上的文件也只会复制到底层linux的文件目录下

docker cp docker-compose-linux.yml windows:/tmp

在宿主机上安装docker-compose并运行:

yay -S docker-compose
sudo docker compose -f docker-compose-win.yml up

如果每次都重新运行一次sudo docker compose -f docker-compose-win.yml up,会更换一个新的container id,但是已经安装好的软件还是会被保留的,因为并没有改变名字或者里面的设置。

所以每次需要打开的时候,直接运行

sudo docker start 容器id

想传输文件/下载的话,我一般会用百度网盘。目前用着还没啥问题,体验感很好。像我这里的port设置的是8006,所以我访问的网址就是主机网址:8006,http就可以登陆上去

另外,也可以通过安装支持RDP远程访问的软件, 在软件服务器地址和端口内容中分别填写IP地址和tcp/udp的port,在我这里是3389(我安装的软件是Remmina)。用户名填写为docker,密码不填写

根据Docker的设计,卷的大小通常是在创建时确定的,且默认情况下不支持动态扩容。因此,直接通过修改docker-compose文件来扩展现有卷的大小是不可能的,除非使用特定的存储驱动或文件系统支持动态调整。如果想要把这个容器从100G扩大到120G或者缩小,需要

sudo docker compose -f docker-compose-win.yml down -v  //删除卷
sudo docker rm 容器id            //直接删除容器
sudo docker compose -f docker-compose-win.yml up//重建资源

其他方法相对来说麻烦很多,这里就不提了。唯一的问题就在于需要重新安装各种软件,这个会有些麻烦,所以我最后还是没舍得再折腾扩容,100g足够跑solidworks,maxwell和comsol,还是很够用的。

使用docker-compose.yml安装ubuntu-desktop

建立一个docker-compose-linux.yml文件

version: "3"
services:ubuntu:image: colinchang/ubuntu-desktopcontainer_name: ubuntu_desktopshm_size: 1gports:- "主机地址:6901:6901"          #这么写可以限制本地访问environment:RAM_SIZE: 4GCPU_CORES: 2DISK_SIZE: 80GVNC_PW: 123456user: rootrestart: always目前的用户名是kasm_user,密码是123456

输入以下命令:

sudo docker compose -f docker-compose-linux.yml up

正在构建,需要保持网络畅通

可以先登陆上桌面,创建新的用户后,修改一下文件,让它不再使用root登陆就可以加强安全性。这个登陆用的用户名在没有创建新用户之前是无法通过文件被改变的。

另外就是个人发现,如果

ports:- 6901:6901        

 则firefox和chrome都可以通过https+本地路径+端口登陆上去,注意这里必须换成https,但是firefox登陆上去会报错,显示无法查看剪切板的内容

如果

ports:- "主机地址:6901:6901"

则只有chrome可以登陆上去,但不会有报错。最后放张图~

目前电脑上有的容器可以通过sudo docker ps -a命令来查看

剩下就都是老生常谈了,关于ros2安装的部分可以移步这篇文章

实验环境搭建集锦_isaac lab pycharm-CSDN博客

http://www.xdnf.cn/news/29755.html

相关文章:

  • 在统信UOS1060上新增备份到U盘
  • 【java实现+4种变体完整例子】排序算法中【基数排序】的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格
  • Python----深度学习(全连接与链式求导法则)
  • Java中常见的锁synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock
  • MainActivity与RecActivity之间的双向数据传递详解
  • 从 0~1 保姆级 详细版 PostgreSQL 数据库安装教程
  • 数据库备份-docker配置主从数据库
  • k8s安装kubeadm
  • 探索大语言模型(LLM):Transformer 与 BERT从原理到实践
  • 回溯算法(2):全排列问题
  • 基于DeepSeek与Excel的动态图表构建:技术融合与实践应用
  • WebSocket介绍
  • 二级评论列表-Java实现
  • 从零搭建微服务项目Pro(第6-2章——微服务鉴权模块SpringSecurity+JWT)
  • OCR技术与视觉模型技术的区别、应用及展望
  • Python语法系列博客 · 第7期[特殊字符] 列表推导式与字典推导式:更优雅地处理数据结构
  • 使用Redis实现实时排行榜
  • 【Easylive】​​Gateway模块 bootstrap.yml 解析
  • 点云数据处理开源C++方案
  • elementUI中MessageBox.confirm()默认不聚焦问题处理
  • Qt UDP 通信的详细实现步骤和示例代码
  • spring boot应用部署IIS
  • matlab论文图一的地形区域图的球形展示Version_1
  • 基于springboot的老年医疗保健系统
  • 【Matlab】中国东海阴影立体感地图
  • 【蓝桥杯 2025 省 A 扫地机器人】题解
  • Graham Scan算法求解二维凸包
  • 通过Xshell上传文件到Linux
  • Python:使用web框架Flask搭建网站
  • JS案例-Promise/A+ 规范的手写实现