내 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를 사용 하고 있기 때문에) Linux에서 모든 것이 잘 실행 됩니다. Windows-제 생각에는-신경 쓰지 않지만 다시 스크립트가 제대로 작동하고 모든 것이 잘됩니다.
첫 번째 사용자의 GUI 및 UID가 .NET이기 때문에 Mac (OSX)에서 이것을 실행하려고 할 때 문제가 발생 500
합니다. 이로 인해 권한이 제대로 작동하지 않습니다.
항상 값을 500에서 1000으로 변경할 수 있지만 ....
사용자에게 투명하도록 스크립트 내부에서 가져올 수있는 방법이 있습니까?
최신 정보
아래 답변에 따라 내 스크립트는 다음과 같습니다.
#!/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
(처음 생성 된 사용자) 로서 기본값에 의존하는 방법이 있습니까?
가장 좋은 방법은 시작 스크립트에서 처리 할 수있는 (선택 사항) 환경 변수를 도커 컨테이너에 전달하는 것입니다.
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))"
최적은 아니지만 현재 docker / docker-compose 외에 다른 호스트 오케스트레이션이없는 한 더 좋은 방법은 없습니다. 예를 들어 컨테이너 시작을 처리하는 쉘 스크립트는이 작업을 간단하게 만듭니다. 또 다른 접근 방식은 docker-compose를 래핑하고 컨테이너가 시작되기 전에 현재 UID / GID 삽입을 처리하는 gradle과 같은 일부 외부 빌드 도구를 통해 docker-compose.yml을 템플릿으로 만드는 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다