docker 非 root,怎么玩 cron?

2021-02-20 08:56:17 +08:00
 ODD10
3403 次点击
所在节点    Docker
27 条回复
maocat
2021-02-20 09:05:02 +08:00
怎么还要在 docker 里面分用户吗,玩的也太细了
Tink
2021-02-20 09:09:04 +08:00
docker 里面的非 root 用户?
yonng
2021-02-20 09:45:59 +08:00
想在 docker 里直接跑那不是要跑个类似 crond 的进程么,那又要引入一个 init 进程。。。操作有点骚。。。

如果运行 docker 的宿主机固定直接加在宿主机上,如果依赖容器中的库或者程序可以通过 `docker exec`
sadfQED2
2021-02-20 09:59:10 +08:00
Docker 里面还要分用户的意义是啥?

如果你非要分,应该得先用 root 账号启动 crond 进程,然后使用普通用户添加任务
ODD10
2021-02-20 10:00:34 +08:00
@maocat #1
查过,非 root 用户运行,这样会安全一些; docker 宿主机运行 top,你可以看到 docker 如果是使用 root,你可以看到 user 也是 root 。
https://i.loli.net/2021/02/20/wheki6dxjYzDJE3.jpg?width=828&height=1792
GuuJiang
2021-02-20 10:05:36 +08:00
docker 不是虚拟机
docker 不是虚拟机
docker 不是虚拟机

所以在 docker 里跑 cron 本身很可能就是个 XY 问题
ODD10
2021-02-20 10:06:12 +08:00
@sadfQED2 #4
提高安全性,我也不懂。
我先宿主机添加用户,再在 Dockerfile 配置添加使用用户,uid 、gid 啥的都要一致。
我想既然存在,就有它的意义。
ODD10
2021-02-20 10:07:53 +08:00
@GuuJiang #6
词组:xy
释义:香烟, 夏颜, 谢迎, 徐逸, 闲鱼, 谢邀, 西柚, 小悦, 戏影, 谢俞, 信誉, 薛洋, 夏亚, 筱雨, 逍遥, 蟹圆, 熊樱, 星元, 性欲, 性瘾, 咸鱼, 小樱, 许呦, 渲言, 昕羊, 霞雅

所以 XY 是啥?
wellsc
2021-02-20 10:08:46 +08:00
本身已经是个沙箱了,为啥还要细分权限
GuuJiang
2021-02-20 10:17:28 +08:00
@ODD10 这个随便一搜都能搜到的吧?“我想要解决 X 问题,我觉得应该用 Y 这种方式,于是向别人求助 Y 应该怎么做,但是实际上想要解决 X 并不应该用 Y”
julyclyde
2021-02-20 14:09:00 +08:00
systemd --user

不过觉得在 docker 里用 cron 属于需求就有问题的,不是怎么解决的问题
Tink
2021-02-20 14:11:25 +08:00
你应该考虑把 docker 以非 root 用户跑,可能还靠谱点
mxalbert1996
2021-02-20 14:15:58 +08:00
@GuuJiang @julyclyde
最近需要用 Docker 运行 Magento,请问如果不用 cron 实现?
https://devdocs.magento.com/guides/v2.4/config-guide/cli/config-cli-subcommands-cron.html
binux
2021-02-20 14:23:00 +08:00
@ODD10 除非你 mount 了 host 的文件系统,或者 nfs,docker 里面的用户和宿主的用户没有关系。你要添加账户也要找 docker 里面添加。
是,你可能看到 docker 用户的 UID 和宿主的重复的时候,top 出来的用户名是宿主的,但是它们真的没有什么关系,单纯就是 Linux 显示的问题。
你 mount 了文件系统那另说。
julyclyde
2021-02-20 14:35:54 +08:00
@mxalbert1996 你有没有考虑过并不是所有软件都适合在容器里运行的?

另外你也可以试试在 user 级运行 systemd.timer
mxalbert1996
2021-02-20 14:46:44 +08:00
@julyclyde 你这话可真有意思,“不适合运行在容器里”的唯一理由就是需要 cron ? docker 里又不是不能运行 cron 我为么要因为这个舍弃容器化? Magento 提供开箱即用的 cron 集成,要不你帮我写一个 systemd.timer 集成?
BeautifulSoap
2021-02-20 14:51:53 +08:00
LZ 你这是真的想得多,查得少

docker 内的 root 虽然和宿主的 root 是同一用户,但默认情况下 Capabilities 是极其受限的,并不具有完整的 root 权限,不能访问系统的设备等资源,只能访问容器内部的资源,且无法逃逸出容器,一般情况下根本不需要特别担心安全问题,如果担心,可以将 docker 的默认启动用户从 root 换成普通用户

并且 docker 支持 user namespace,LZ 你如果追求绝对的安全,配置 user namespace 才是解决你安全顾虑的方法,你纠结容器内非 root 用户是找错方向了
https://docs.docker.com/engine/security/userns-remap/
ODD10
2021-02-20 14:55:48 +08:00
@binux #14
肯定挂载了文件呐
UID 不一样,就没权限读写之类
所以我在宿主机修改文件用户权限
ODD10
2021-02-20 14:59:15 +08:00
@BeautifulSoap #17
我用过这个,Portainer 就没办法工作了,又多一个坑,还得加 host 排除。
我就想知道有什么好办法玩 cron
BeautifulSoap
2021-02-20 15:46:32 +08:00
@ODD10 请: https://github.com/portainer/portainer/issues/662

总结:cron 直接 root 跑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/754450

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX