発生した問題
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番目の方法は、展開するとより簡潔に感じられますが、コードベースに不要なファイルを追加することはお勧めしません。要約すると、最初のを使用することをお勧めします
展開
アピールソリューションは、特定のファイル名を持つファイルに対して生成されます。つまり、ファイル名が決定されたときのソリューションです。
プログラムでファイルを生成するときにファイル名が不明な場合、たとえば時間の変化により、アピール方法が無効になります。
この状況に対する適切な解決策はありません。プログラムで回避し、生成されたファイルを特定のフォルダーに配置してから、法線マッピング関係を使用できます。