Docker Compose和Volumes问题

3

我已经尝试运行我的docker-compose.yml文件2-3天了,花费了很多时间在互联网上寻找解决方法,但似乎没有什么作用。主机电脑是Windows 10,Docker计算机是Linux。

使用以下命令创建卷: docker volume create --driver local --opt type=none --opt device='C:\Users\Kishan\Desktop\db' --opt o=bind mssqldb

以下是我的docker-compose.yml文件:

version: '3.8'

services:
   db:
     image: mcr.microsoft.com/mssql/server:2017-latest
     volumes:
       - mssqldb:/opt/var/mssql/data
     environment:
       - ACCEPT_EULA=Y
       - SA_PASSWORD=yourStrong@Password
       - COMPOSE_CONVERT_WINDOWS_PATHS=1
     restart: always
     ports:
       - "1433:1433"

   api:
     depends_on:
       - db
     entrypoint: ["./wait_for.sh", "db:1433", "-t", "3600", "--", "execute", "api"]
     image: api:latest
     ports:
       - "80:80"
     restart: always

volumes:
    mssqldb:
        external: true

我不确定代码是否运行成功,但我发现在我的 C:\Users\Kishan\Desktop\db 目录下没有数据库文件(MDF 和 LDF 文件)生成。请有人能帮我吗?


针对您的操作(尝试将特定主机目录暴露给容器),我认为绑定挂载比Docker卷更适合。不幸的是,我无法访问Windows系统,因此无法重现您的问题或验证我的解决方案是否有效。 - larsks
\ 在 Linux 中是一个转义字符,因此如果在 bash shell 或 Linux Docker 引擎中解析命令,则路径变为:C:UsersKishanDesktopdb。Linux 路径分隔符是 /,我认为您不需要 :,所以它可能是 /c/Users/Kishan/Desktop/db。像 larsks 一样,我没有 Windows 机器来验证这一点,而且它可能因 Windows 安装方式而异(例如 WSL2 vs HyperV VM)。 - BMitch
感谢您提供的答案,但是这两个答案都没有帮助到我。 - Kishan
1个回答

1
将音量目标从- mssqldb:/opt/var/mssql/data更改为- mssqldb:/var/opt/mssql

你的建议起作用了,但我只需要在路径中添加数据。因此,我的最终路径变为/var/opt/mssql/data - Kishan
你能否重新创建卷来再试一次吗?docker volume rm mssqldbdocker volume create --driver local --opt type=none --opt device=C:/Users/Kishan/Desktop/db --opt o=bind mssqldb - frank_lee
我不需要创建任何外部卷。我将卷行更改为 C:\ Users \ Kishan \ Desktop \ db:/ var / opt / mssql / data ,它正在工作。 - Kishan
你的解决方案更简单,干得好! - frank_lee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接