我有以下脚本作为我的Dockerfile,因此Docker图像的ENTRYPOINT:
#!/bin/bash set -e # Setup permissions data_dir="/var/www/HTML" usermod -u 1000 www-data && groupmod -g 1000 www-data chown -R www-data:root "$data_dir" if [ -d "$data_dir" ]; then chgrp -R www-data "$data_dir" chmod -R g+w "$data_dir" find "$data_dir" -type d -exec chmod 2775 {} + find "$data_dir" -type f -exec chmod ug+rw {} + fi # Enable rewrite a2enmod rewrite expires # Apache gets grumpy about PID files pre-existing rm -f /var/run/apache2/apache2.pID source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND "$@"
因为大多数发行版的GUI和UID是1000 (我们使用的是Fedora和Ubuntu),所以一切运行良好。 windows – 我认为 – 并不关心它,但脚本再次正常工作,一切顺利。
由于第一个用户的GUI和UID是500 ,我试图在Mac(OSX)中运行这个问题。 这使权限不能正常工作。
我知道我总是可以将值从500更改为1000,但….
对于Nginx和linux来说,有一些关于权限的问题
如何将文件权限打印为string?
如何为一个尚未存在的用户安装一个目录
Python – testing目录权限
停止MysqL数据库服务器:MysqLd失败
有没有什么办法从脚本中获取这个,所以这对用户是透明的?
UPDATE
按照下面的答案,这是我的脚本如何看起来像:
#!/bin/bash set -e # Setup permissions data_dir="/var/www/HTML" usermod -u ${UID} www-data && groupmod -g ${GUID} www-data chown -R www-data:root "$data_dir" if [ -d "$data_dir" ]; then chgrp -RH www-data "$data_dir" chmod -R g+w "$data_dir" find "$data_dir" -type d -exec chmod 2775 {} + find "$data_dir" -type f -exec chmod ug+rw {} + fi # Enable rewrite a2enmod rewrite expires # Apache gets grumpy about PID files pre-existing rm -f /var/run/apache2/apache2.pID source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND "$@"
如果我没有定义UID或GUID会发生什么? 有没有办法依靠默认值1000:1000 (第一个创build的用户)?
新build文件夹权限问题
AdjustTokenPrivileges错误ERROR_NOT_ALL_ASSIGNED
pipe理windows和mac git commiters之间的权限
Vala和PolicyKit
Schtaskspipe理用户权限错误?
你最好的选择是将(可选的)环境变量传递给你的docker容器,这个变量可以被启动脚本处理。
泊坞窗,compose.yml:
version: '2.1' services: www: image: someNginx environment: - ${UID} - ${GID}
然后在你的入口脚本中使用$UID/$GID的值来更新用户的uID / gID。
可悲的是,docker-compose没有提供引用当前用户的UID / GID(相关问题 )的基本能力,所以这种方法要求每个用户确保主机上存在环境变量。 例子~/.bashrc片段,将照顾:
export UID export GID="$(ID -g $(whoami))"
不是最佳的,但目前没有更好的方式,除非你有除码头/码头 – 撰写以外的其他主机业务流程。 处理容器启动的shell脚本会使这个微不足道。 另一种方法是通过像gradle这样的外部构建工具对docker-compose.yml进行模板化,该构建包装docker-compose,并在容器启动之前负责插入当前的UID / GID。
你可以得到用户ID:
ID -u
这在linux 1000上返回当前用户(通常是第一个,因为它是你自己的系统)
现在你可以做
if[ID -u == 1000];then usermod -u 1000 www-data && groupmod -g 1000 www-data elif[ID -u == 500];then usermod -u 500 www-data && groupmod -g 500 www-data fi
注意:iam不能确定语法
总结以上是内存溢出为你收集整理的从入口点dynamicselect在主机上运行Docker的用户GUI和UID全部内容,希望文章能够帮你解决从入口点dynamicselect在主机上运行Docker的用户GUI和UID所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)