Dockerボリュームファイルですが、ディレクトリを作成します

発生した問題

Dockerイメージは、実行プロセス中に新しいファイルを生成します。この新しいファイルをコンテナーにマウントして、簡単に表示および保存できるようにします。docker-compose.ymlの書き込み方法は次のとおりです。

volumes:
  - ./sample.txt:/code/sample.txt
  # sample.txt是运行生成的新文件。/code是它在容器中的路径

その結果、ホストとコンテナーにそれぞれ2つのフォルダーsample.texが生成されたため、プログラムはその後正常に実行されませんでした。

問題の原因

コンテナの起動時に、コンテナとホストにマウントされたファイルがない場合、デフォルトでフォルダが生成されます

上記は、実行中のプロセス中に新しいファイルが生成され、ホストに対応するファイルがないため、dockerがアピールされたマウントの問題を処理する方法です。結果は正常です。

解決

1.ホスト上で事前に新しいファイルを生成します(推奨)

理解も非常に簡単です。問題の原因は、両端にファイルがなく、マウントポイントがないため、デフォルトで2つのフォルダーが生成されることです。ホストコンピュータ上で事前に新しいファイルが生成されるので、特定のマウント関係が形成されます。操作は次のとおりです。

touch sample.txt #docker-compose.yml同级目录下执行
docker-compose up -d ImageName    #正常启动容器

Dockerfileやdocker-compose.ymlなど、残りの部分を変更する必要はありません。

次に、コンテナにファイルを追加します

2番目の方法は、コンテナーから開始し、コンテナー内に新しいファイルを事前に生成することです。考え方は上記と同じです。

Dockerflieを追加します。

ADD ./sample.tex /code  #在生成code目录后,code在此处是工作目录,可自己修改

ビルド環境にこのファイルがあることが前提です。つまり、このファイルもコードベースにある必要があります。

docker-compose.ymlなどを含む残りの部分を変更してから、通常どおりに開始する必要はありません。

概要:
上記の2つの方法には、それぞれ長所と短所があります。1つ目は展開時に少し面倒ですが、実際には、1つの展開用に新しいファイルを作成する必要があり、それを直接コピーして貼り付けることができます。2番目の方法は、展開するとより簡潔に感じられますが、コードベースに不要なファイルを追加することはお勧めしません。要約すると、最初のを使用することをお勧めします

展開

アピールソリューションは、特定のファイル名を持つファイルに対して生成されます。つまり、ファイル名が決定されたときのソリューションです。

プログラムでファイルを生成するときにファイル名が不明な場合、たとえば時間の変化により、アピール方法が無効になります。
この状況に対する適切な解決策はありません。プログラムで回避し、生成されたファイルを特定のフォルダーに配置してから、法線マッピング関係を使用できます。

おすすめ

転載: blog.csdn.net/csdniter/article/details/109214778