진입 점에서 호스트에서 Docker를 실행하는 사용자 GUI 및 UID를 동적으로 선택

레이니어 PM

내 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

터미널에서 작동하더라도 Flask 및 Flask Migrate를 사용하여 Docker에서 진입 점 스크립트를 실행할 수 없습니다.

분류에서Dev

RegEx에서 http 및 https를 선택적으로 사용하는 방법

분류에서Dev

MacBookPro 호스트를 사용하여 Docker 컨테이너에서 GUI 앱 실행

분류에서Dev

Java 및 데모 연결을 통한 사용자 입력을 기반으로 두 개의 NIC에서 IP 주소를 동적으로 선택

분류에서Dev

적절한 클라이언트 인증서를 자동으로 또는 사용자 선택에 요청

분류에서Dev

동적으로 채워진 드롭 다운에서 jquery를 사용하여 선택한 텍스트 또는 드롭 다운 값을 설정하는 방법

분류에서Dev

Java Netbeans를 사용하여 GUI에서 선택한 CheckBox를 실행하는 방법

분류에서Dev

PHP에서 Ajax 응답 텍스트를 사용하여 선택 태그 내부에 옵션을 동적으로 생성하는 방법은 무엇입니까?

분류에서Dev

Form Events Symfony 5를 사용하여 사용자 정의 FormType에서 양식 선택을 동적으로 수정

분류에서Dev

유효성 검사 및 선택적 요청 컨텍스트를 사용하여 C # 코드에서 직접 servicestack 서비스를 호출하는 방법

분류에서Dev

유효성 검사 및 선택적 요청 컨텍스트를 사용하여 C # 코드에서 직접 Servicestack 서비스를 호출하는 방법

분류에서Dev

VBA 매크로-ListBox를 사용하여 Excel에서 동적으로 열 선택

분류에서Dev

Javafx : GUI에서 선택 상자를 사용하여 셀 업데이트가 작동하지 않음

분류에서Dev

로그인 한 사용자가 지점장 인 지점에서 모든 사용자를 선택하는 방법

분류에서Dev

동일한 텍스트 상자를 반복적으로 사용하여 HTML 및 Javascript에서 사용자의 입력을받을 수 있습니까?

분류에서Dev

SQL을 사용하여 효율적으로 문자열에서 특정 텍스트를 선택하는 방법

분류에서Dev

Docker 및 Capybara를 사용하여 호스트에서 셀레늄 실행

분류에서Dev

jQuery를 사용하여 HTML 테이블에서 동적으로 열 선택

분류에서Dev

postgresql에서 선택 쿼리를 사용하여 열과 행을 동적으로 만드는 방법

분류에서Dev

C #에서 자동으로 선택 및 선택되지 않은 라디오 버튼 및 타이머를 구현하는 방법은 무엇입니까?

분류에서Dev

Excel에서 사용자 폼의 콤보 상자 선택을 기반으로 레이블 및 텍스트 상자를 추가하는 방법

분류에서Dev

사용자 선택에 따라 더 적은 변수 색상 테마를 동적으로 변경하는 방법

분류에서Dev

선택 및 실행 프로 시저를 사용하여 테이블에 데이터 삽입

분류에서Dev

비동기 적으로 실행되고 신호를 내보내는 명령에 실행 취소 스택 사용

분류에서Dev

bash 스크립트에서 psql 및 -F 매개 변수를 사용하여 PostgreSLQ 비밀번호를 자동으로 도입

분류에서Dev

선택 상자에서 텍스트로 채워진 div를 얻는 방법은 무엇입니까?

분류에서Dev

동적으로 추가 된 선택 요소에 자동 진행에 초점

분류에서Dev

Firefox에서 작동하지 않는 jQuery를 사용하여 초점에 텍스트 선택

분류에서Dev

한정자를 사용하는 정규식에서 선택적 무제한 공백 및 하이픈 허용

Related 관련 기사

  1. 1

    터미널에서 작동하더라도 Flask 및 Flask Migrate를 사용하여 Docker에서 진입 점 스크립트를 실행할 수 없습니다.

  2. 2

    RegEx에서 http 및 https를 선택적으로 사용하는 방법

  3. 3

    MacBookPro 호스트를 사용하여 Docker 컨테이너에서 GUI 앱 실행

  4. 4

    Java 및 데모 연결을 통한 사용자 입력을 기반으로 두 개의 NIC에서 IP 주소를 동적으로 선택

  5. 5

    적절한 클라이언트 인증서를 자동으로 또는 사용자 선택에 요청

  6. 6

    동적으로 채워진 드롭 다운에서 jquery를 사용하여 선택한 텍스트 또는 드롭 다운 값을 설정하는 방법

  7. 7

    Java Netbeans를 사용하여 GUI에서 선택한 CheckBox를 실행하는 방법

  8. 8

    PHP에서 Ajax 응답 텍스트를 사용하여 선택 태그 내부에 옵션을 동적으로 생성하는 방법은 무엇입니까?

  9. 9

    Form Events Symfony 5를 사용하여 사용자 정의 FormType에서 양식 선택을 동적으로 수정

  10. 10

    유효성 검사 및 선택적 요청 컨텍스트를 사용하여 C # 코드에서 직접 servicestack 서비스를 호출하는 방법

  11. 11

    유효성 검사 및 선택적 요청 컨텍스트를 사용하여 C # 코드에서 직접 Servicestack 서비스를 호출하는 방법

  12. 12

    VBA 매크로-ListBox를 사용하여 Excel에서 동적으로 열 선택

  13. 13

    Javafx : GUI에서 선택 상자를 사용하여 셀 업데이트가 작동하지 않음

  14. 14

    로그인 한 사용자가 지점장 인 지점에서 모든 사용자를 선택하는 방법

  15. 15

    동일한 텍스트 상자를 반복적으로 사용하여 HTML 및 Javascript에서 사용자의 입력을받을 수 있습니까?

  16. 16

    SQL을 사용하여 효율적으로 문자열에서 특정 텍스트를 선택하는 방법

  17. 17

    Docker 및 Capybara를 사용하여 호스트에서 셀레늄 실행

  18. 18

    jQuery를 사용하여 HTML 테이블에서 동적으로 열 선택

  19. 19

    postgresql에서 선택 쿼리를 사용하여 열과 행을 동적으로 만드는 방법

  20. 20

    C #에서 자동으로 선택 및 선택되지 않은 라디오 버튼 및 타이머를 구현하는 방법은 무엇입니까?

  21. 21

    Excel에서 사용자 폼의 콤보 상자 선택을 기반으로 레이블 및 텍스트 상자를 추가하는 방법

  22. 22

    사용자 선택에 따라 더 적은 변수 색상 테마를 동적으로 변경하는 방법

  23. 23

    선택 및 실행 프로 시저를 사용하여 테이블에 데이터 삽입

  24. 24

    비동기 적으로 실행되고 신호를 내보내는 명령에 실행 취소 스택 사용

  25. 25

    bash 스크립트에서 psql 및 -F 매개 변수를 사용하여 PostgreSLQ 비밀번호를 자동으로 도입

  26. 26

    선택 상자에서 텍스트로 채워진 div를 얻는 방법은 무엇입니까?

  27. 27

    동적으로 추가 된 선택 요소에 자동 진행에 초점

  28. 28

    Firefox에서 작동하지 않는 jQuery를 사용하여 초점에 텍스트 선택

  29. 29

    한정자를 사용하는 정규식에서 선택적 무제한 공백 및 하이픈 허용

뜨겁다태그

보관