Docker, Fedora 37 및 5억 개 이상의 풀 SFTP 이미지와 관련된 상당히 틈새 문제가 있습니다 atmoz/sftp
.
Fedora가 아닌 공식 저장소에서 Docker를 설치했는데 SFTP 서버에 로그인하려고 하면 컨테이너가 CPU 코어 하나를 100% 사용했습니다. 1~2분 후에 마침내 로그인하고 sftp>
메시지를 받았습니다.
SFTP 서버 시작
docker container run \
--interactive \
--tty \
--rm \
--name sftp-cpu-problem-debug \
--publish 2222:22 \
--env SFTP_USERS=cpuproblem:123:::IN \
atmoz/sftp:alpine
# You might have to kill it from a separate session using docker kill sftp-cpu-problem-debug
로그인을 시도하세요(별도의 터미널 세션에서)
sftp -P 2222 -oLogLevel=DEBUG3 cpuproblem@localhost
# Password is 123
또한 DEBUG3 로깅을 사용하여 SSH 데몬을 시작하려고 시도했지만 로그 항목은 CPU 문제가 없는 것과 동일합니다.
ChrootDirectory %h
컨테이너의 파일에서 해당 줄을 제거 하면 /etc/ssh/sshd_config
공식 Docker 패키지를 사용해도 문제 없이 로그인됩니다. 물론 이렇게 하면 chroot가 비활성화됩니다.
다음 시도에서는 각각 CPU 문제 없이 로그인할 수 있는 SFTP 컨테이너가 작동하게 되었습니다.
- Docker 대신 Podman을 사용하여 동일한 이미지를 사용하여 컨테이너를 시작하고 기본적으로 chroot가 활성화된 SFTP 구성을 사용하세요.
moby-engine
Docker 저장소의 공식 Docker 패키지 대신 Fedora 저장소의 패키지를 사용하십시오 .- Debian의 WSL2에서 공식 Docker 저장소 패키지를 사용하세요.
이는 일종의 Fedora 구성 문제처럼 보입니다. 동일한 버전이 Debian에서 작동하고 Fedora 패키지(이전 마이너 버전)도 작동하기 때문입니다.
- Fedora
moby-engine
패키지는 공식 Docker 패키지가 구성하지 않는 무엇을 구성합니까?- 관련성이 없을 수도 있지만 Spring Security에 엔트로피가 부족하고 사용되지 않아 Spring Java 애플리케이션이 느리게 시작되는 상황이 생각납니다
/dev/urandom
. - 이것은 매우 이상한 극단적인 상황이다.
- SFTP 프롬프트를 표시하기 전에 SSH 데몬이 계산을 시도하는 것은 무엇입니까?
- chroot를 비활성화하면 이 문제가 해결되는 이유는 무엇입니까?
- 데비안에서는 왜 이것이 문제가 되지 않습니까?
- 관련성이 없을 수도 있지만 Spring Security에 엔트로피가 부족하고 사용되지 않아 Spring Java 애플리케이션이 느리게 시작되는 상황이 생각납니다
- SELinux를 허용적으로 실행하도록 설정하고 SELinux로 실행도 시도했지만
--privileged
여전히 CPU 문제가 있습니다. - 컨테이너에서 OpenSSH를 수동으로 업데이트하려고 시도했지만 그것도 도움이 되지 않았습니다.
답변1
오늘 이 문제에 부딪혔고 몇 가지 strace
검색 끝에 Alexandru Scvorşov의 다음 블로그 게시물을 발견했습니다.
꼭 읽어야 하지만 간단히 말해서 OpenSSH는 BSD 특정 시스템 호출을 사용하여 주어진 정수보다 큰 모든 파일 설명자를 닫습니다. 이 시스템 호출은 Linux에서 사용할 수 없으므로 폴백 구현은 close()
시스템 제한에 도달할 때까지 각 후보 파일 설명자를 호출합니다.
이 문서에서는 이 문제를 해결하는 데 도움이 될 수 있는 자세한 내용을 제공합니다.