Docker compose Windows卷上的docker compose不工作
在过去的一周里,我一直在和Docker一起玩,我认为容器的想法非常有用,但是尽管在过去的3天里我阅读了所有我能阅读的东西,我还是无法让体积映射工作Docker compose Windows卷上的docker compose不工作,docker-compose,yaml,docker-volume,Docker Compose,Yaml,Docker Volume,在过去的一周里,我一直在和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 Do
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映像,我需要从中持久化数据,但我想知道它的神奇之处是什么,因为我尝试过的任何东西都不起作用。非常感谢您的帮助
我运行的是Windows10Pro版本1803
为什么这么难?
而不是你告诉任何知道如何让它真正起作用的人 解决方案是使用卷:选项在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实例时,我都会丢失所有的DB数据。 我最终发现,这是因为默认情况下Docker for Windows无法解释Windows路径,因此必须激活COMPOSE\u CONVERT\u Windows\u path标志。为此:
- 运行命令“set COMPOSE\u CONVERT\u WINDOWS\u path=1”
- 重新启动Docker
- 转到设置>共享驱动器>重置凭据,然后选择驱动器,然后应用
- 从命令行中,杀死容器(docker容器rm-f)
- 重新运行容器
希望对您有所帮助如果您的windows帐户凭据已更改,您还必须重置共享驱动器的凭据。(设置>共享驱动器>重置凭据)
在我的情况下,密码是由我的公司安全策略更改的 默认情况下,在Windows上安装Docker后,驱动程序共享被禁用-因此您将无法使用卷(存储在磁盘上) 通过:
Docker in tray-右键单击-Settings
(设置)启用此类共享对我有帮助,卷开始正常工作。
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
重要的是,您不需要在volumes部分显式创建卷,但docker compose up将创建它(docker run也是如此)
奇怪的是,它永远不会出现在
docker卷
但它可以用于windows目录和容器路径/mssql中的相同文件
您可以使用以下工具进行测试:
docker run --rm -v c:/Temp/sqldata:/data alpine ls /data
或
如果它消失,可能会丢失凭据,并通过Docker->Settings->Shared Drive->Reset credentials将其重置
我希望它是清晰的,为您涵盖了所有方面。对于使用UBTO WSL的用户:
sudo mkdir/c
sudo挂载——绑定/mnt/c/c
- 使用新路径导航到项目文件(/c/您的项目路径而不是/mnt/c/您的项目路径)
- 编辑docker-compose.yml并使用卷的相对路径:(如./src而不是c/your project path/src)
docker编写
version: '3'
services:
postgres:
image: postgres:latest
environment:
POSTGRES_DB: datasource
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- 5432:5432
volumes:
- postgres-data:/var/lib/postgresql/data
mysql:
image: mysql:latest
environment:
MYSQL_DATABASE: 'train'
MYSQL_USER: 'mysql'
MYSQL_PASSWORD: 'mysql'
MYSQL_ROOT_PASSWORD: 'mysql'
ports:
- 3306:3306
volumes:
- mysql-data:/var/lib/mysql
volumes:
postgres-data:
external: true
mysql-data:
external: true
这对我来说很有效。我终于找到了答案,以下内容对我很有帮助:()以及微软网站上的一些文档。我将yaml文件的适用部分更改如下:sqldb:image:dbimage:latest container\u name:azure db volumes:-“C:\\ProgramData\\Docker\\volumes\\sqldata:C:\\mssql”是的,它也适用于我!这是docker的官方问题/解决方案你是个英雄,伙计。没有其他帮助,我一直在钻研数十个不同的SO和github问题,这最终对我有效。此外,如果命令“set COMPOSE\u CONVERT\u WINDOWS\u path=1”不存在,您可以将COMPOSE\u CONVERT\u path=1放入.env文件中。在那之后,docker-compose.yml文件${PWD}内部也应该工作!
docker volume create --name postgres-data -d local
docker volume create --name mysql-data -d local
docker-compose up -d
version: '3'
services:
postgres:
image: postgres:latest
environment:
POSTGRES_DB: datasource
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
ports:
- 5432:5432
volumes:
- postgres-data:/var/lib/postgresql/data
mysql:
image: mysql:latest
environment:
MYSQL_DATABASE: 'train'
MYSQL_USER: 'mysql'
MYSQL_PASSWORD: 'mysql'
MYSQL_ROOT_PASSWORD: 'mysql'
ports:
- 3306:3306
volumes:
- mysql-data:/var/lib/mysql
volumes:
postgres-data:
external: true
mysql-data:
external: true