私はこの1週間Dockerで遊んでおり、コンテナのアイデアは非常に便利だと思いますが、過去3日間にできることをすべて読んだにもかかわらず、ボリュームマッピングを機能させることができません
get docker-compose to use my existing volume.
Docker Version: 18.03.1-ce
docker-compose version 1.21.1, build 7641a569
I created a volume using the following via a Dockerfile
# Reference SQL image
FROM Microsoft/mssql-server-windows-developer
# Create directory within SQL container for database files mapped to the volume
VOLUME sqldata:c:/MSSQL
and here it shows:
C:\ProgramData\Docker\volumes>docker volume ls
local sqldata
Now I've tried probably 60+ different "solutions" based on StackOverflow and Docker forums, but none of them work. (Note despite the names below with Azure I am simply trying to get this to run locally, Azure is next hurdle)
Docker-compose.yaml:
version: '3.4'
services:
ws:
image: wsManager
container_name: Azure-wcf
ports:
- "80"
depends_on:
- db
db:
image: dbimage:latest
container_name: Azure-db
volumes:
- \sqldata:/mssql
# - type: volume
# source: sqldata
# target: /mssql
ports:
- "1433"
I've added a volumes section but it does not help,
volumes:
sqldata:
external:
name: sqldata
changed the - \sqldata:/mssql
to every possible slash .. . ~ whatever. Moved the file to yaml file
c:\ ProgramData\Docker\volumes-基本的に私の検索結果に表示された提案。 dbImageは、データを永続化するために必要なSQL Serverイメージですが、私が試したことがないので何が魔法なのか疑問に思っています。どんな助けも大歓迎です。
Windows 10 Proビルド1803で実行しています。
なぜこれがそんなに難しくなければならないのですか?これを実際に機能させる方法を知っている人なら誰よりも。
解決策は、以下のようにvolumes:オプションを使用して、Windows上のトゥルーパスを参照することです。
sqldb:
image: sqlimage
container_name: Azure-db
volumes:
- "C:\\ProgramData\\Docker\\volumes\\sqldata:c:\\mssql"
データを永続化するために、次を使用しました。
environment:
- "sa_password=ddsql2017@@"
- "ACCEPT_EULA=Y"
- 'attach_dbs= {"dbName":"MyDb","dbFiles":"C:\\MSSQL\\MyDb.mdf","C:\\MSSQL\\MyDb.ldf"]}]'
SOと他の場所で検索した例の多くが私には役に立たず、Dockerフォーラムにはボリュームのマウントが役に立たないという多くの投稿があります。ウィンドウズ。
Windowsマシンの特定のパスにボリュームをマウントしようとすると、同様の問題に苦労していました。基本的には機能しなかったため、Dockerインスタンスを再起動するたびにすべてのDBデータが失われます。 Docker for WindowsがデフォルトでWindowsパスを解釈できないため、フラグCOMPOSE_CONVERT_WINDOWS_PATHSをアクティブにする必要があるためだとわかりました。そうするには:
それが役に立てば幸い
Windowsアカウントの資格情報が変更された場合は、共有ドライブの資格情報もリセットする必要があります。 ([設定]> [共有ドライブ]> [資格情報のリセット])
私の場合、パスワードは会社のセキュリティポリシーによって変更されました。
Ubunto WSLを使用している場合:
Sudo mkdir /c
Sudo mount --bind /mnt/c /c
docker-compose up
Windowsには資格情報とDockerが使用している仮想マシン(Hyper-V、VirtualBox-Dockerのバージョンと設定に依存)に制限があるため、Windows上のDockerには奇妙な動作があります。
基本的に、フォルダをマップするのは正しいです
ボリューム:
サービスのセクション:
パスは
version: '3.4'
services:
db:
image: dbimage:latest
container_name: Azure-db
volumes:
- c:/Temp/sqldata:/mssql
ボリュームセクションでボリュームを明示的に作成する必要はありませんが、docker-compose upで作成することが重要です(docker runでも同じです)。
奇妙なことは、それが決して現れないということです
dockerボリュームls
しかし、Windowsディレクトリ内とコンテナパス/ mssql内の同じファイルで使用できます
以下でテストできます:
docker run --rm -v c:/Temp/sqldata:/data Alpine ls /data
または
docker run --rm -v c:/Temp:/data Alpine ls /data
消える場合は、おそらく資格情報を失い、Docker->設定->共有ドライブ->資格情報のリセットでリセットします。
それが明確であり、あなたのためにすべての側面をカバーしたことを願っています。