我使用devcontainer来构建和调试.NET Core应用程序。我想在主机和容器之间共享user-secrets。
如果用户的位置取决于主机,该怎么办?
我尝试同时安装两个位置,但这会引发错误。
{
"dockerComposeFile":"docker-compose.yml",
"service":"devcontainer",
"runServices":[],
"workspaceFolder":"/workspace",
"forwardPorts":[
5000,
5001
],
"remoteEnv":{
"ASPNETCORE_ENVIRONMENT":"Development",
"ASPNETCORE_URLS":"https://+:5001;http://+:5000"
}
}
version: "3.7"
services:
devcontainer:
image: mydevcontainerimage:12345
volumes:
- ..:/workspace:cached
- ${APPDATA}/Microsoft/UserSecrets/:/root/.microsoft/usersecrets
- ${HOME}/.microsoft/usersecrets:/root/.microsoft/usersecrets
# Forwards the local Docker socket to the container.
- /var/run/docker.sock:/var/run/docker.sock
command: sleep infinity
Docker-compose崩溃,并显示错误。
ERROR: Duplicate mount points: [/.microsoft/usersecrets:/root/.microsoft/usersecrets:rw, C:\Users\steven\AppData\Roaming\Microsoft\UserSecrets:/root/.microsoft/usersecrets:rw]
答案 0 :(得分:2)
解决方案可能是在主机和容器之间使用named volume。 因此,docker-compose将仅引用该命名的卷。 但是,命名的卷创建将特定于主机。
有关基于主机路径创建命名卷的信息,请参见here
但是如所述here
Windows上的内置本地驱动程序不支持任何选项。
例如, device = c:\ a \ path \ to \ my \ folder 在Windows下将无法运行。
但是,由于Windows路径%APPDATA%扩展为类似 c:\ a \ path \ to \ my \ folder 的名称,您可以将其改写为 / host_mnt / c / a / path / to / my / folder 并将其用于设备:
docker volume create --name my_test_volume --opt type=none --opt device=device=/host_mnt/c/a/path/to/my/folder --opt o=bind
对于其他人,这假定 c:可在docker设置(资源/文件共享)中访问。