由于 docker 容器中的 "database is locked",swift 构建失败?

标签 swift docker mount

基本上,我正在尝试使用 docker 通过以下设置和步骤在 win7 中学习 swift:

1)物理机运行win7

2)win7中安装的docker toolbox 1.12.5 window版

3) 打开“Docker Quickstart Terminal”,这是一个 MINGW64 控制台

4) 在 MINGW64 控制台中,运行“docker pull swift”来拉取 docker swift 镜像

5) 使用“docker run -it --hostname=value --privileged=true --net=host -v//d/dev/tools/docker/swift://swift:z 创建容器--name swiftfun 24cc712c0763/bin/bash”,实际上卷映射不起作用。我无法在我的 win7 主机的文件夹中创建文件

swift 版本是:

root@value:/swift/PerfectTemplate/.build# swift -version
Swift version 3.0.2 (swift-3.0.2-RELEASE)
Target: x86_64-unknown-linux-gnu

Linux 容器是:

root@value:/swift/PerfectTemplate/.build# cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
NAME="Ubuntu"
VERSION="16.04.2 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.2 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

6) 然后在容器“mount -t cifs//10.x.x.xxx/D$/dev/tools/docker/swift/swift -o username=myusername,password=mypassword,noperm”,这次可以了,我可以看到我的 win7 文件夹中的文件,并且可以将文件写入 win7 。

7) 转到容器中的文件夹“/swift”并从 git 中提取代码,如链接 http://perfect.org/docs/gettingStarted.html 所示。我可以看到在 win7 文件夹中创建的文件/文件夹

8) 在容器中,转到文件夹“PerfectTemplate”并运行 swift build ,但失败并显示以下消息:

...

Cloning https://github.com/PerfectlySoft/Perfect-Thread.git
HEAD is now at aee3b32 Cleanup
Resolved version: 2.0.9
<unknown>:0: error: unable to attach DB: unable to initialize database (database
 is locked)
error: exit(1): /usr/bin/swift-build-tool -f /swift/PerfectTemplate/.build/debug
.yaml

...

在我的win7文件夹中创建了一个文件build.dbD:\dev\tools\docker\swift\PerfectTemplate\.build\build.db
并且文件大小仍为 0 字节

以下是建筑物的详细信息:

/usr/bin/swiftc --driver-mode=swift -I /usr/lib/swift/pm -L /usr/lib/swift/pm -l
PackageDescription /swift/PerfectTemplate/Packages/PerfectThread-2.0.9/Package.s
wift -fileno 4
/usr/bin/swift-build-tool -f /swift/PerfectTemplate/.build/debug.yaml -v
<unknown>:0: error: unable to attach DB: unable to initialize database (database
 is locked)
error: exit(1): /usr/bin/swift-build-tool -f /swift/PerfectTemplate/.build/debug
.yaml -v

如果我使用 Linux 本地文件夹来构建代码,那么一切正常。build.db 的大小会发生变化。它与使用//ip/drive 安装的驱动器有什么关系吗? 我该如何解决?谢谢

最佳答案

好吧,看来 sqlite 不能容忍容器中映射的 windows 文件夹。我尝试使用//ip/folder 方法和 virtualbox 共享文件夹方法映射文件夹。它们都不起作用。似乎与 winLockFile 有关,请检查下面的链接

http://sqlite.1065341.n5.nabble.com/SQLite3-database-on-windows-network-drive-and-unreliable-connection-td75875.html

https://www.sqlite.org/whentouse.html

我还检查了 swift 包管理器的源代码,似乎无法将选项添加到 swift-build-tool 作为“swift build”命令的一部分

关于由于 docker 容器中的 "database is locked",swift 构建失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42706506/

相关文章:

ios - 在 Swift 中将 PEM 响应转换为 PCKS12 数据

ios - 使用 TrueTime 获取设备独立时间的可靠性如何?

ios - 从类中获取类型

ios - 我如何在 UITableView 中检测手机屏幕中部署的单元格是什么

docker - 看板Docker SSL

docker - 访问 Dockerfile 中的 container_name(来自 docker-compose)

Android:当 SD 卡真正安装且可读时的 Intent

filesystems - df -kvh 未显示可用空间 - 剩余空间在哪里

go - 如何使用 golang 从自定义 docker 注册表中提取图像?

Linux文件异常:Device or resource busy