php Xiaobian Yuzai は、コンテナ テクノロジを使用するときに、ファイルをコンテナにコピーした後にファイルが見つからないという一般的な問題に遭遇することがあります。この問題は通常、Docker などのコンテナ化プラットフォームを使用するときに発生します。原因としては、ファイル パスが正しく設定されていないか、コンテナ内のファイル システムがホストと一致していないことが考えられます。この問題を解決するには、絶対パスを使用するか、共有フォルダーを介してファイルをコンテナーにコピーするなど、さまざまな方法があります。この問題を解決する前に、まずコンテナのファイル システムとファイル パスの間のマッピング関係と、ファイル パスを正しく構成する方法を理解する必要があります。
以下のようなdockerfileがあります:
リーリーhello-world go ファイルからバイナリを構築するだけです。ただし、次の docker-compose 設定でこのコンテナを実行しようとすると、「exec ./start.sh: no such file or directory
」と表示されます。
ディレクトリ構造は
です リーリーしたがって、start.sh
は、copy を介して <code>builder
コンテナにロードする必要があります。 . 行についても同様で、copy --from=builder /app/start.sh /app/start.sh
を介して 2 番目のコンテナに渡す必要があります。
コンテキスト、start.sh
の内容は次のとおりです:
私を最も混乱させる部分は、dockerfile でこれを cmd [ "ls", "-l" ]
に変更すると、実際には
dockerfile で entrypoint [ './hello-bin' ]
に変更すると、バイナリも正常に実行されます。なぜ ./start.sh
がないと表示されるのか理解できません。
更新: @larsks からインスピレーションを受けて、./start.sh
のヘッダーを #!/bin/bash
から # !/ に変更するとことに気づきました。 bin/sh
と実行すると、魔法のように動作します。ここでの根本的な問題が何なのかまだ混乱しています。bash ヘッダーを保持したい場合は、docker ファイルをどのように修正すればよいでしょうか?
start.sh
で#!/bin/bash
を使用したためにエラーが発生します。
Alpine Docker イメージには、デフォルトでは bash がインストールされていません。代わりに Busybox シェルを使用します。
#bash をコンテナにインストールできます。
Docker: Alpine ベースの Docker イメージで bash を使用する方法を参照してください。
#!/bin/bash を
#!/bin/sh に変更することもできます。
以上がファイルをコンテナにコピーした後、ファイルが見つからないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。