1. ホーム
  2. ドッカー

dockerは、bashのような問題に遭遇します。そのようなファイルやディレクトリがない、またはsh: 見つからない

2022-03-03 06:44:13
<パス

docker は bash に遭遇しました。No such file or directory or sh: not found などの問題が発生しました。

ホストツールキットを使いやすくするために、docker volumeにはホストツールキットディレクトリがあり、コンテナ内のマウントディレクトリからツールキットを使用する際に表示されます

bash: xxx: No such file or directory 
sh: xxx: not found


存在しないネイティブファイル、パーミッション、SELinuxなどの低レベルの問題の後、問題が発生した理由を探ります。

推測1:ホスト上のファイルディレクトリのinodeとDocker内のinodeが異なっている

使用方法 stat /xxx/xxx ファイルツリーのinode情報を見るには


結論から言うと 一貫性、除外

推測2:アプリケーションにDockerコンテナで実行するためのライブラリが不足している

実行ファイルが実行に必要なライブラリを欠いている場合、No such file or directoryやnot foundなどの問題が返されます。

<ブロッククオート

https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/ldd.html
原則: ldd は実行ファイルではなく、シェルスクリプトです。ld-linux.so (elfダイナミックライブラリのローダ) は実行モジュールの依存関係を表示するもので、基本的にld-linux.soは実行モジュールより前に動作して制御するため、上記の環境変数が設定されると ld-linux.so が実行モジュールの依存関係を表示するよう選択されることになります。

を使用すると ldd /xxx/xxx プログラムの実行中の依存関係を見るために

該当する依存パッケージが確かに存在しないことが判明しました
解決方法 レスポンシブ依存ライブラリのインストール

派生した質問

この問題で遭遇する実行ファイルは jdk で、docker 自体にも jdk が付属しています。ホストの jdk は実行されないのに、docker であらかじめビルドされた jdk は実行されるのはなぜですか?

ホストは Oracle jdk、docker は open jdk がプリインストールされており、ホストのアーキテクチャは x86_64 であるが docker は amd64 を使用する。