>

PHP 이미지 진입 점은 다음과 같습니다. 진입 점은root로 실행되며 필자의 경우 필요합니다. 따라서 컨테이너에서 실행하는 모든 명령은 루트로 실행됩니다. 특정 명령의 경우 누군가가 docker exec -it php composer install 를 실행하려고 할 때 다른 사용자로 실행하고 싶습니다.  작곡가는 진입 점에 설정된 다른 사용자로 실행해야합니다. 누군가 docker exec -it php drush status 를 실행하려고 할 때  drush는 진입 점에 설정된 다른 사용자로 실행해야합니다. 진입 점 내부의 if 또는 switch 문이 도움이 될 수 있습니다. 나는 https : //와 같은 것을 시도했습니다. unix.stackexchange.com/questions/476155/how-to-pass-multiple-parameters-to-su-user-c-command 이지만 이중 대시 (-)로 매개 변수를 전달하면 일부 명령이 중단됩니다.

Dockerfile

COPY entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]

entrypoint.sh

#!/bin/sh
set -e
# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
    set -- php-fpm "$@"
fi
exec "$@"


  • 답변 # 1

    사용 사례를 잘 모르겠지만 su-exec를 사용하여 진입 점 스크립트 내에서 루트가 아닌 사용자에게 권한을 드롭합니다. 바인드 마운트 볼륨 (일반적으로 /var/run/docker.sock )에 대한 권한을 변경해야하기 때문에 가장 일반적으로 이것을 사용해야합니다. ).

    기본적으로 시작점에서 루트 수준 작업을 수행 한 다음 컨테이너 서비스를 실행할 때 루트가 아닌 사용자에게 드롭 다운합니다.

    이 블로그는 gosu 를 사용한 개념을 설명합니다. , su-exec   gosu 의 리 팩터입니다  C에서 10kb vs 1.8MB : https://denibertovic.com/posts/handling-permissions-with-docker-volumes/

    컨테이너에서이를 사용할 때 AFAIK가 고려하지 않는 보안 문제에 유의하십시오.

관련 자료

  • 이전 ethereum - 트러플에 배포 된 스마트 계약 테스트
  • 다음 python - 목록에서 튜플을 제거하는 방법?