以宿主机普通用户 id 进入 docker 容器的方法

在容器内编译代码后,文件在容器外出现不可修改,无法 source 的问题。

文件不可修改的问题,容器内编译后的文件在外部显示是上锁的

上锁是因为进入容器内的用户与容器外的用户权限不同,导致的无法修改,一般进容器后的用户 id 是 root 的用户,权限高于容器外普通用户。

解决的方法一种是在容器外切换到 root 用户,另一种方法是以当前用户 id 进入到容器

docker run 有一个 --user 参数可以选择进入到容器内的用户 id,参数 $(id -u):$(id -g) 表示当前用户和当前用户相同权限

docker run -it --user $(id -u):$(id -g) jjucat/nav:gui

进容器后用户名时候会提示 "I have no name!"

这是因为在容器内没有宿主机的用户信息,需要把宿主机用户信息映射到容器中去。ubuntu20 中用户信息在 "/etc/passwd" 文件中,通过 "-v 宿主机路径:容器路径" 参数把路径映射到容器中即可。

docker run -it --user $(id -u):$(id -g) -v /etc/passwd:/etc/passwd jjucat/nav:gui

成功以当前用户 id 进入到容器 !

无法 source 文件的问题是因为工作目录映射到容器中的路径和在宿主机中的路径不同导致的,只要同步路径就可以了。

例如工作目录在宿主机中是 "/home/lmr/ws/nav/proj1_ws"

docker run -it -v /home/lmr/ws/nav/proj1_ws:/home/lmr/ws/nav/proj1_ws jjucat/nav:gui

-------------------- 分割线 20240421 --------------------

参考

groups:can't find name for group id 问题解决

上面进入容器前只映射用户信息的话,在容器内会有如下的提示:

docker groups cannot find name for group id

这是因为缺少组信息,ubuntu 中用户信息和用户组信息是分别保存在 /etc/passwd 和 /etc/group 目录下,所以两个路径最好都映射进容器中。

docker run -it --user $(id -u):$(id -g) -v /etc/passwd:/etc/passwd -v /etc/group:/etc/group  jjucat/nav:gui

进入 docker 后没有 group 的错误提示了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值