从入口点dynamicselect在主机上运行Docker的用户GUI和UID

从入口点dynamicselect在主机上运行Docker的用户GUI和UID,第1张

概述从入口点dynamicselect在主机运行Docker的用户GUI和UID

我有以下脚本作为我的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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1282869.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存