我在docker镜像中运行mqtt代理Mosqitto。 我使用以下参数
sudo docker run -d -p 1883:1883 -p 1884:1884 -v /home/mosquitto/apps/dev/mosquitto:/mosquitto --restart always -u mosquitto eclipse-mosquitto:1.4.
这应该将主机文件夹/ home / mosquitto / apps / dev / mosquitto挂载到图像文件夹/ mosquitto 问题是主机用户ID(1001)和泊坞窗用户ID(100)不匹配。
如果我没有指定-u mosquitto,那么应用程序会抱怨无法写入/mosquitto/logs/mosquitto.log
所以我想我会指定-u mosquitto,使图像中的应用程序以用户1001的形式运行,因此对已安装的文件具有写入权限。 哪个有效。 但是,Mosquitto应用程序在退出时创建了一个新的数据库文件。该文件是以101用户为所有者制作的。
当我指定-U到docker时会发生什么。 怎么样做了我所期待的(允许写入主机文件)和那种没有做我期待的事情(仍然用原始图像用户ID制作文件)
也许这与这个特定的docker镜像有关..它在内部运行一些切换用户的脚本?
答案 0 :(得分:0)
如何为任何用户创建对日志路径的写访问权限?它可能不太安全。但如果它只是日志,让我们看看docker里面的应用程序可以写入它。
或者考虑将一些命令引导到容器以在内部进行权限更改。
答案 1 :(得分:0)
如果您使用Linux或OSX作为Docker位置,则很可能是安全性或文件权限问题。转到此错误报告Permission denied for directories created automatically by Dockerfile ADD command #1295并跳到最后...有几个链接到子错误报告,您很可能找到您的解决方案。我有一个非常类似的问题,结果证明是一个selinux错误配置。