要約:podman
Ubuntuサーバーで別のイメージストアを試してみましたが、権限の問題が発生しました。実行すると共有画像が表示されますpodman images
。実行しようとするとError: creating /etc/mtab symlink: permission denied
。 sudoerとして使用すると、sudo
ローカル共有イメージを使用する代わりにリモートイメージをインポートしようとします。他のユーザーも共有イメージを実行できません。
私のアプローチは2つのブログに基づいています。
ターゲット:「サーバー管理者」(実際には、教育目的でコンテナを使用するシステム管理経験がほとんどないコンピュータサイエンス教師)として一つイメージを共有し、複数のユーザーが共有イメージを実行できるようにします。これにより、私たちは同じコピーをたくさん作らなくなります(何百人もの学生を考えてください)。引く画像コピーに置き換えます)同じ各ユーザーに画像が提供されますが、各ユーザーは同じコンテナ化された設定を簡単に使用できます。
私の試み:
私はそこまでほとんどの道を歩いたと信じています。ただし、最終的にアカウントや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