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