ubuntu:xenial(macOS 호스트)을 실행하는 Docker 컨테이너에서 memlock에 대한 ulimit를 설정할 때 "작업이 허용되지 않습니다" 오류가 발생합니다.

ubuntu:xenial(macOS 호스트)을 실행하는 Docker 컨테이너에서 memlock에 대한 ulimit를 설정할 때 "작업이 허용되지 않습니다" 오류가 발생합니다.

다음과 같이 시작된 컨테이너에서 "memlock" 시스템 제한을 설정하는 데 문제가 있습니다.

   docker run -it ubuntu:xenial

간단히 말해서, 제가 시도한 것은 다음과 같습니다.

Bash 터미널 세션 1에서:

docker run -it ubuntu:xenial

/etc/security/limits.conf다음 줄을 포함하도록 설정 * hard memlock unlimited * soft memlock unlimited

파일 끝에.

그런 다음 호스트 시스템의 다른 bash 터미널에서 동일한 컨테이너로 "bash in"하고 다음을 시도하십시오.

root@6ae391cfb6de:/# ulimit -l unlimited

다음 오류가 발생합니다.

bash: ulimit: max locked memory: cannot modify limit: Operation not permitted

세부정보 복사

저는 MacOS Sierra 10.12.6/Docker 버전 18.03.1-ce, 버전 9ee9f40에서 실행 중입니다.

쉘 #1

macOS> ulimit -l # output of this command is 'unlimited' which shows host ulimits are not the issue 출력: 무제한

맥OS> docker run -it ubuntu:xenial

다음 명령은 위 명령으로 시작된 xenial-docker-instance의 Mac의 bash 쉘 #1에서 실행됩니다.

 cd  # to home directory
 grep limit .bashrc      # check it any session limits are defined at shell startup -- nothing found

 cat >> /etc/security/limits.conf <<EOF
 *                hard    memlock         unlimited
 *                soft    memlock         unlimited
 EOF

Mac의 쉘 #2

containerId=`docker ps | grep ubuntu | sed -e's/ .*//'`  # assumes you only have one docker instance of ubuntu running
docker exec -t -i $containerId  bash                     # 'bash in' to ubuntu running container launched in shell #2
ulimit -l 
# output  is 82000    ... huh?
#
# try setting
ulimit -l unlimited
#
#  Nope.. i get this error: 
#       bash: ulimit: max locked memory: cannot modify limit: Operation not permitted

종료: 세부정보 복사

어떤 조언이나 지침이라도 대단히 감사하겠습니다.

답변1

내 친구 Chris Cellucci가 나에게 답을 주었습니다. run with --privileged

이에 대해서는 오늘이나 내일 자세히 설명하겠습니다.

답변2

docker가 이 기능을 제공한다면 좋지 않을 것입니다.

Linux에서는 내 생각에 그것은 능력입니다 CAP_IPC_LOCK.

잠금이 필요한 이유는 일반적으로 좋은 생각도 아니고 필요하지도 않습니다. 잠자는 동안 스왑을 막지는 않습니다.

여기서 확인했어요https://docs.docker.com/docker-for-mac/docker-toolbox/#the-docker-toolbox-environmentMac에는 두 가지 버전의 Docker가 있습니다. 둘 다 가상 머신 내부 Linux 인스턴스의 컨테이너에서 실행됩니다. 따라서 기능이 적절할 것입니다. 적절한 기능을 추가해야 합니다. 바라보다http://man7.org/linux/man-pages/man7/capability.7.html

관련 정보