过去一周我一直在玩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 build 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。
在尝试将卷安装到我的Windows机器的特定路径时,我遇到了类似的问题:基本上它不起作用所以每次重新启动我的Docker实例时,我都会丢失所有数据库数据。我终于发现这是因为默认情况下Docker for Windows无法解释Windows路径,因此必须激活标志COMPOSE_CONVERT_WINDOWS_PATHS。为此:
希望能帮助到你
如果您的Windows帐户凭据已更改,则还必须重置共享驱动器的凭据。 (设置>共享驱动器>重置凭据)
就我而言,我的公司安全策略更改了密码。
Windows上的Docker具有奇怪的行为,因为Windows对凭据以及Docker正在使用的虚拟机(Hyper-V,VirtualBox - 取决于您的Docker版本和设置)有限制。
基本上,你在映射文件夹是正确的
卷:
您服务中的部分:
路径是
version: '3.4'
services:
db:
image: dbimage:latest
container_name: azure-db
volumes:
- c:/Temp/sqldata:/mssql
重要的是,您不需要在卷部分中显式创建卷,但是docker-compose up将创建它(对于docker run也是如此)。
奇怪的是它永远不会出现在
码头工人量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-> Settings-> Shared Drives-> Reset credentials重置它。
我希望它清楚并涵盖了所有方面。
对于那些使用Ubuntu WSL的人:
sudo mkdir /c
sudo mount --bind /mnt/c /c
docker-compose up