-
仅配置 .env 文件(不使用本地存储),使用 docker-compose 启动服务,第一次运行时:
第 1 个问题似乎是 docker 的预期行为,可以通过事先以当前用户创建 data 文件夹避免 第 2 个问题在以当前用户创建 data 文件夹后仍会发生。参考 docker-compose.yml 中可以指定容器运行用户(可以覆盖 Dockerfile 中指定的用户),我找到的解决方案是
PS:docker-compose.yml 无法使用 $UID,因为 UID 属于 shell 变量而非环境变量;而以 我想了解的是以这种解决方案配置 docker-compose.yml 是否合适以及是否是因为我对主机的配置有误导致 Permission denied 错误 |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments
-
这个其实是已知问题,只是之前没有找到合适的解决方案,所以一直搁置着。在事先创建好data目录且有root权限的情况下应该没有什么大问题,你提到的第二个问题可能是因为other用户组没有data目录的读写权限。 主要的问题在于Docker容器内外用户不一致,如果不事先创建目录的话Docker会自动创建一个属于root用户的目录,由于容器内为了安全考虑特地切换成了非root用户,所以无法访问data目录。如果容器内依旧以root用户运行的话应该就没有第一个问题,但仍有一个问题是主机上的非root用户无法访问Docker创建的data目录,所以事先创建目录应该是一个合理的选择。 至于使用环境变量配置运行用户的方法,之前是考虑到需要加额外参数比较麻烦,所以没有采用,现在来看还算是一个能够接受的方案,待我进一步研究一下,如果还有其他更好的方案也欢迎提出。应当避免的是在构建Docker镜像时指定用户,因为这需要每个用户自行构建镜像。 |
Beta Was this translation helpful? Give feedback.
-
感谢提供解决思路,我直接新建了data和data/temp目录,然后还是出现了下面的错误
我将data/temp目录权限设置成root777问题解决。 |
Beta Was this translation helpful? Give feedback.
这个其实是已知问题,只是之前没有找到合适的解决方案,所以一直搁置着。在事先创建好data目录且有root权限的情况下应该没有什么大问题,你提到的第二个问题可能是因为other用户组没有data目录的读写权限。
主要的问题在于Docker容器内外用户不一致,如果不事先创建目录的话Docker会自动创建一个属于root用户的目录,由于容器内为了安全考虑特地切换成了非root用户,所以无法访问data目录。如果容器内依旧以root用户运行的话应该就没有第一个问题,但仍有一个问题是主机上的非root用户无法访问Docker创建的data目录,所以事先创建目录应该是一个合理的选择。
至于使用环境变量配置运行用户的方法,之前是考虑到需要加额外参数比较麻烦,所以没有采用,现在来看还算是一个能够接受的方案,待我进一步研究一下,如果还有其他更好的方案也欢迎提出。应当避免的是在构建Docker镜像时指定用户,因为这需要每个用户自行构建镜像。