【发布时间】:2021-05-16 23:27:38
【问题描述】:
我正在对我的 aspnet 核心身份服务器 Web 应用程序进行 docker 化。我已经测试了从 docker 容器运行的应用程序并且它可以工作。
$ docker run -d ^
-e "KeyFilePath"="/app/certs/authFile.cer" ^
-p 5000:5000 ^
-v e:/certs:/app/certs/ ^
--name identity ^
identity:0.1-docker
现在,我将它连接到我的 docker-compose.yml 中,我的应用程序无法找到 /app/certs/ 中指定的文件。这是我的身份服务器的 docker-compose 部分
services:
identity:
image: identity.api:${PLATFORM:-linux}-${TAG:-latest}
build:
context: .
dockerfile: Identity/Dockerfile
depends_on:
- sqlserver
ports:
- 5000:5000
volumes:
- "e:/certs:/app/certs"
environment:
- KeyFilePath="/app/certs/authFile.cer"
我已经解决这个问题已经有一段时间了。使用 docker run 和 -v 运行时,卷被平滑映射,但无法从 docker-compose up identity 实现相同的效果
使用 docker exec -it <container-id> sh ,我可以看到文件存在于所需目录中。尽管如此,我的应用还是无法访问该文件。
在代码中,只需使用File.Exists(keyFilePath) which 来检查是否存在
- 通过
docker run命令启动容器时返回true。 - 在开始使用
docker-compose up identity时返回false。即使文件存在,检查日志也会显示File.Exists ["/app/certs/authFile.cer"] => False.。
你知道这个奇怪问题的根本原因吗?
我在跑步
- Aspnet Core 2.1 Web 应用程序
- Docker 桌面版:
Docker version 20.10.2, build 2291f61 - Docker Compose 版本:
docker-compose version 1.27.4, build 40524192
提前感谢您的帮助
【问题讨论】:
标签: docker asp.net-core docker-compose docker-volume