Podmanを使用してイメージストアを接続するときに/etc/mtabシンボリックリンク権限エラーを解決するには?

Podmanを使用してイメージストアを接続するときに/etc/mtabシンボリックリンク権限エラーを解決するには?

要約:podmanUbuntuサーバーで別のイメージストアを試してみましたが、権限の問題が発生しました。実行すると共有画像が表示されますpodman images。実行しようとするとError: creating /etc/mtab symlink: permission denied。 sudoerとして使用すると、sudoローカル共有イメージを使用する代わりにリモートイメージをインポートしようとします。他のユーザーも共有イメージを実行できません。

私のアプローチは2つのブログに基づいています。

Podmanのその他の画像ストアの閲覧

今試してみるよく使われない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年に公開されたので大丈夫です)または最新バージョンで修正されたバグが発生する可能性がありますが、とにかく試してみましょう!

共有イメージストアの作成

これは次のようになります驚くべきことにあなたが試したのと似ています:)。

  1. 共有ストレージ用のディレクトリが必要です。

    mkdir /var/lib/shared-storage
    
  2. イメージでいっぱいにしましょう。

    podman --root /var/lib/shared-storage pull docker.io/alpine:latest
    
  3. 私たちは知っていますそれこのオプションを使用すると画像を見ることができるので機能します--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
    
  4. これで、次のadditionalimagestoresオプションを設定する必要があります/etc/containers/storage.conf

    [storage]
    driver = "overlay"
    graphroot = "/var/lib/containers/storage"
    
    [storage.options]
    additionalimagestores = ["/var/lib/shared-storage"]
    

    (このgraphrootオプションがないとpodman設定されていないと音が鳴り続けるので存在します。)

  5. この構成で——そして他の変化はありません。- 次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/Opodmanこの出力には、からデータをインポートしていることを示す追加の列が表示されますadditionalimagestores

  6. それでも実行中なので、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. テストユーザーになる1

    su - user001
    
  2. 次のように生成されます$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非常に重要です(リンクされた最初の記事で直接確認)。

  3. 新しいイメージストアにアクセスしています...

    podman image ls
    

    ...その後、失敗することを見てください。

    Error: error opening "/var/lib/shared-storage/overlay-images/images.lock": permission denied
    
  4. すべてのコンテンツに対する読み取り権限を付与し、ディレクトリに対する実行権限を付与します/var/lib/shared-storage〜のようにroot、ランニング:

    chmod -R a+rX /var/lib/shared-storage/
    
  5. アカウントに戻ってコマンドを再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
    
  6. コンテナを実行して、すべてが正しく機能していることを確認します。

    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]sussh

おすすめ記事