요약:podman
Ubuntu 서버에서 다른 이미지 저장소를 사용해 보았지만 권한 문제가 발생했습니다. 실행하면 공유 이미지가 나타납니다 podman images
. 실행하려고 하면 Error: creating /etc/mtab symlink: permission denied
. sudoer로 사용하면 sudo
로컬 공유 이미지를 사용하는 대신 원격 이미지를 가져오려고 합니다. 다른 사용자도 공유 이미지를 실행할 수 없습니다.
내 접근 방식은 두 개의 블로그를 기반으로 합니다.
지금 사용해 볼 만한 자주 사용되지 않는 Podman 기능 5가지
표적:"서버 관리자"(실제로는 교육 목적으로 컨테이너를 사용하는 시스템 관리 경험이 거의 없는 컴퓨터 과학 교사)로서하나의이미지를 공유하고 여러 사용자가 공유 이미지를 실행할 수 있도록 허용합니다. 이렇게 하면 우리는 동일한 복사본을 많이 만들지 않게 됩니다(수백 명의 학생을 생각해보세요).당기다이미지 카피로 대체)동일한각 사용자에게 이미지가 제공되지만 각 사용자는 동일한 컨테이너화된 설정을 쉽게 사용할 수 있습니다.
내 시도:
나는 거기까지 대부분의 길을 걸었다고 믿는다. 그러나 궁극적으로 계정 이나 serveradmin
일반 사용자(예: ) 모두 공유 이미지를 실행할 수 없습니다.user01
Ubuntu Server를 새로 설치하면 이런 일이 발생합니다.
먼저, 로그인 시 serveradmin
대표적인 업데이트 내용
serveradmin@testserver> sudo apt update
serveradmin@testserver> sudo apt dist-upgrade
다음으로 설치 podman
하고 작동하는지 테스트합니다.
serveradmin@testserver> sudo apt install podman
serveradmin@testserver> podman run hello-world # worked perfectly
hello-world 이미지만 표시될 것으로 예상됩니다. 예, 작동합니다.
serveradmin@testserver> podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/hello-world latest feb5d9fea6a5 13 months ago 19.9 kB
모든 사용자가 이미지에 액세스할 수 있는 공유 저장 위치 생성
serveradmin@testserver> sudo mkdir /var/lib/shared-storage
DockerHub에서 내 pmtest
("podman 테스트") 이미지 가져오기공유됨장소
serveradmin@testserver> podman --root /var/lib/shared-storage pull docker.io/<my_dockerhub>/pmtest
가져온 이미지를 찾고 있지만 예상대로 아직 표시되지 않습니다.
serveradmin@testserver> podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/hello-world latest feb5d9fea6a5 13 months ago 19.9 kB
다음에 대한 스토리지 구성을 만듭니다.serveradmin
serveradmin@testserver> mkdir ~/.config/containers/
serveradmin@testserver> vim .config/containers/storage.conf
serveradmin@testserver> cat ~/.config/containers/storage.conf
[storage]
driver = "overlay"
[storage.options]
additionalimagestores = [ "/var/lib/shared-storage"]
serveradmin
사용자는 /var/lib/shared-storage/*
이미지 목록을 읽을 수 없습니다.
serveradmin@testserver> podman images
Error: error opening "/var/lib/shared-storage/overlay-images/images.lock": permission denied
를 사용하면 어떤 이미지도 볼 수 없으며 sudo
이전에 표시되었던 hello-world
이미지 도 볼 수 없습니다.
serveradmin@testserver> sudo podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
그렇다면 /var/lib/shared-storage
세상을 읽을 수 있고 세상을 실행 가능하게 만드는 것이 괜찮을까요?
serveradmin@testserver> sudo chmod +r -R /var/lib/shared-storage/
serveradmin@testserver> sudo chmod +x -R /var/lib/shared-storage/
이제 이미지가 실제로 사용자에게 serveradmin
표시됩니다 .
serveradmin@testserver> podman images
REPOSITORY TAG IMAGE ID CREATED SIZE R/O
docker.io/<my_dockerhub>/pmtest latest 824fec7db82a 16 minutes ago 262 MB true
docker.io/library/hello-world latest feb5d9fea6a5 13 months ago 19.9 kB false
그러나 이미지를 실행할 수 없어 여러 번 시도했습니다.
serveradmin@testserver> podman run pmtest
Error: creating /etc/mtab symlink: permission denied
serveradmin@testserver> podman run docker.io/<my_dockerhub>/pmtest:latest
Error: creating /etc/mtab symlink: permission denied
sudo
둘 중 하나를 사용할 때 작동하지 않습니다
serveradmin@testserver> sudo podman run pmtest
Error: short-name "pmtest" did not resolve to an alias and no unqualified-search registries are defined in "/etc/containers/registries.conf"
sudo podman run
공유 이미지를 실행하는 대신 풀 이미지를 사용하세요 . 이것은 내가 원하는 것이 아닙니다.
serveradmin@testserver> sudo podman run docker.io/<my_dockerhub>/pmtest:latest
Trying to pull docker.io/<my_dockerhub>/pmtest:latest...
Getting image source signatures
Copying blob cf92e523b49e done
Copying blob d59e8b19e2b2 [====================>-----------------] 37.2MiB / 68.6MiB
다른 사용자는 어떻습니까? 어쨌든 이것이 최종 목표이므로 다른 표준 사용자를 만드십시오.
serveradmin@testserver> sudo useradd user01
serveradmin@testserver> sudo passwd user01
New password:
Retype new password:
passwd: password updated successfully
로 로그인했지만 user01
이미지를 볼 수 없습니다
user01@testserver> podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
user01
이전과 마찬가지로 에 대한 추가 이미지 저장소 구성을 만듭니다 .
user01@testserver> micro .config/containers/storage.conf
user01@testserver> cat ~/.config/containers/storage.conf
[storage]
driver = "overlay"
[storage.options]
additionalimagestores = [ "/var/lib/shared-storage"]
이제 user01
공유된 이미지를 실제로 볼 수 있습니다.
user01@testserver> podman images
REPOSITORY TAG IMAGE ID CREATED SIZE R/O
docker.io/<my_dockerhub>/pmtest latest 824fec7db82a 5 hours ago 262 MB true
그러나 user01
여전히 동일한 문제로 이미지를 실행할 수 없습니다 serveradmin
. 단, 사용할 수도 없습니다.sudo
user01@testserver> podman run pmtest
Error: creating /etc/mtab symlink: permission denied
user01@testserver> podman run docker.io/<my_dockerhub>/pmtest:latest
Error: creating /etc/mtab symlink: permission denied
user01@pmtestserver:~$
답변1
몇 가지 주요 단계가 누락된 것 같습니다. 내 Ubuntu 22.04.1 시스템에서 프로세스를 단계별로 살펴보고 최종 결과가 무엇인지 살펴보겠습니다.
설치하자마자 시작하겠습니다 podman
. 먼저 어떤 버전이 있는지 살펴보겠습니다.
root@ubuntu:~# podman version
Version: 3.4.4
API Version: 3.4.4
Go Version: go1.17.3
Built: Thu Jan 1 00:00:00 1970
OS/Arch: linux/amd64
음, 실망스럽네요. Podman 4는 2021년 8월에 출시됩니다. 이 버전에서 구현되지 않은 기능(링크한 첫 번째 기사는 2020년에 게시되었으므로 괜찮습니다)이나 최신 버전에서 수정된 버그가 발생할 수 있지만 어쨌든 시도해 보겠습니다!
공유 이미지 저장소 만들기
이것은 다음과 같을 것이다놀랍게도당신이 시도한 것과 비슷합니다 :).
공유 저장소를 위한 디렉터리가 필요합니다.
mkdir /var/lib/shared-storage
이미지로 채워보겠습니다.
podman --root /var/lib/shared-storage pull docker.io/alpine:latest
우린 알아저것이 옵션을 사용할 때 이미지를 볼 수 있기 때문에 작동합니다
--root
.root@ubuntu:~# podman --root /var/lib/shared-storage/ image ls REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/alpine latest 9c6f07244728 2 months ago 5.83 MB
이제 다음
additionalimagestores
옵션을 구성해야 합니다/etc/containers/storage.conf
.[storage] driver = "overlay" graphroot = "/var/lib/containers/storage" [storage.options] additionalimagestores = ["/var/lib/shared-storage"]
(이
graphroot
옵션이 없으면podman
설정되지 않았다고 계속해서 소리가 나기 때문에 존재합니다.)이 구성으로——그리고 다른 변화는 없어요-- 다음
podman
과 같이 실행될 수 있음을 알 수 있습니다root
.root@ubuntu:~# podman image ls REPOSITORY TAG IMAGE ID CREATED SIZE R/O docker.io/library/alpine latest 9c6f07244728 2 months ago 5.83 MB true
R/O
podman
이 출력에는 에서 데이터를 가져오고 있음을 나타내는 추가 열이 표시됩니다additionalimagestores
.여전히 실행 중이므로
root
이 이미지에서 컨테이너를 시작할 수 있습니다.root@ubuntu:~# podman run --rm docker.io/alpine:latest cat /etc/os-release NAME="Alpine Linux" ID=alpine VERSION_ID=3.16.2 PRETTY_NAME="Alpine Linux v3.16" HOME_URL="https://alpinelinux.org/" BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
공유 위치에 이미지가 이미 존재하므로 이미지를 가져올 필요가 없다는 것을 알 수 있습니다.
권한이 없는 사용자로 공유 이미지 저장소에 액세스
이제 작동이 완료되었으므로 root
권한이 없는 사용자에게도 작동하도록 만들어 보겠습니다. 다음과 같이 테스트 사용자를 만들었습니다.
useradd -m -c "Test User 001" user001
테스트 사용자 되기 1 :
su - user001
다음과 같이 생성됨
$HOME/.config/containers/storage.conf
:mkdir ~/.config/containers cat > ~/.config/containers/storage.conf <<EOF [storage] driver = "overlay" [storage.options] additionalimagestores = ["/var/lib/shared-storage"] [storage.options.overlay] mount_program = "/usr/bin/fuse-overlayfs" EOF
마지막 부분인 설정은
storage.options.overlay.mount_program
매우 중요합니다(링크한 첫 번째 기사에서 직접 확인).새 이미지 저장소에 액세스하는 중...
podman image ls
...그런 다음 실패하는 것을 지켜보세요.
Error: error opening "/var/lib/shared-storage/overlay-images/images.lock": permission denied
모든 콘텐츠에 대한 읽기 권한을 부여하고 디렉터리에 대한 실행 권한을 부여합니다
/var/lib/shared-storage
.~처럼root
, 달리기:chmod -R a+rX /var/lib/shared-storage/
계정으로 돌아가서 명령을 다시
user001
시도해보세요podman
.user001@ubuntu:~$ podman image ls REPOSITORY TAG IMAGE ID CREATED SIZE R/O docker.io/library/alpine latest 9c6f07244728 2 months ago 5.83 MB true
컨테이너를 실행하여 모든 것이 제대로 작동하는지 확인합니다.
user001@ubuntu:~$ podman run --rm docker.io/alpine:latest cat /etc/os-release NAME="Alpine Linux" ID=alpine VERSION_ID=3.16.2 PRETTY_NAME="Alpine Linux v3.16" HOME_URL="https://alpinelinux.org/" BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
그게 다야! 이 과정 중 어느 시점에서든 다른 동작을 발견할 경우 알려주시면 무엇을 알아낼 수 있는지 알아보도록 하겠습니다.
1 이 단계가 작동하고 podman
불평을 멈추려면 다음을 수행해야 한다는 점에 유의하십시오 loginctl enable-linger 1000
. 이는 로컬 콘솔을 통해 로그인하는 경우에는 필요하지 않습니다.systemctl start [email protected]
su
ssh