2개의 서비스가 있는 도커 컨테이너를 시작하려고 합니다. 서비스 중 하나는 루트가 아닌 사용자로 실행되어야 합니다. 그렇지 않으면 서비스가 시작되지 않습니다. 다른 하나는 루트로 실행해야 합니다.
이제 docker가 로그를 캡처할 수 있도록 파일을 연결하고 싶습니다(다음을 사용 하여 non_root_service.log
확인 ) ./dev/tty
/dev/stdout
docker logs $CONTAINER
ln -s /dev/stdout non_root_service.log
문제는 이 작업을 수행할 때 루트가 아닌 사용자에게 쓰기 권한이 없거나 /dev/tty
루트 /dev/stdout
가 아닌 서비스가 시작될 때 다음 오류가 발생한다는 것입니다.
cannot open "non_root_service.log": Permission denied
하지만 링크를 만들지 않으면 로그를 캡처할 수 없습니다 docker logs $CONTAINER
. 루트가 아닌 사용자로 실행하고 로그 파일을 연결할 수 있도록 이 문제를 해결하는 방법을 아는 사람이 있습니까 /dev/{tty,stdout}
?
추신: 쉘 스크립트를 사용하든 CMD ["starter.sh"]
감독자를 사용하여 CMD ["supervisord", "-n", "-c", "/app/supervisord.conf"]
두 서비스를 모두 시작하든 동일한 오류가 발생합니다.
답변1
가장 깨끗한 솔루션은 아닐 수도 있지만 다음을 시도해 볼 수 있습니다.
tail -f non_root_service.log &
단순히 파일을 stdout으로 테일링하고 테일링 프로세스를 백그라운드에 두시겠습니까? p를 stdout으로 직접 추적해 볼 수도 있습니다.
ln -s ln -fs /proc/self/fd/1 non_root_service.log
그러나 non_root_service.log 파일에 대한 액세스 권한이 있습니까? 달리면 stat non_root_service.log
무엇을 볼 수 있나요 whoami
?