ループモジュールがロードされていても、コンテナにループデバイスがありません。

ループモジュールがロードされていても、コンテナにループデバイスがありません。

私はコンテナ内にループデバイスを作成してインストールすることを可能にしようとしています。これは私の開発システムでは機能しますが、自動化されたビルドを実行する必要があるビルドサーバーでは機能しません。

privilegedコンテナが.Myコンテナの開始行:で始まったことを確認しました。docker run --privileged -it --rm <my_build_image>:latest /bin/bashコンテナ内で次の手順を試しました。Lostupのマニュアルページから:

# dd if=/dev/zero of=/var/tmp/file.img bs=1024k count=4
...
# losetup --show --find /var/tmp/file.img
...

これにより、次の未使用のループデバイスが提供され、それを/ dev / loopに接続する必要があります。N。ただし、次の内容が表示されます(ループモジュールがロードさ/dev/loop-controlれていることを示します)。

[root@64a3a6900e0d /]# losetup --show --find /var/tmp/file.img
losetup: Could not find any loop device. Maybe this kernel does not know
       about the loop device? (If so, recompile or `modprobe loop`.)
[root@64a3a6900e0d /]# ls /dev/loop*
/dev/loop-control
[root@64a3a6900e0d /]# lsmod | grep loop
loop                   28072  0

私の開発ボックスではこれが機能します。権限でコンテナをロードloopして起動してループデバイスを作成できました。今何を確認する必要がありますか?

ベストアンサー1

問題に対する解決策があります。いくつかの問題は、私がdockerを初めて使用するわけではありませんが、まだ熟練したdockerユーザーではないということです。コンテナが作成されると、/devその時点で存在していたディレクトリが何らかの方法でコンテナにマッピングされると思います。私はこれがディレクトリの「リアルタイム」説明だと思いましたが、/devそうではありません。ファイルが存在しない場合、/dev/loop#コンテナに権限があってもファイルが存在することは許可されません。

したがって、解決策は、Jenkinsパイプラインにコンテナを作成する前にファイル生成をスケジュールすることです/dev/loop#。これにより、コンテナが作成され/dev/loop#使用可能になります。

おすすめ記事