C# 从运行.Net core的不同容器访问docker卷文件
我有一个docker compose,它运行许多容器,包括一个带有.Net核心代码的容器和一个dd代理容器 我注意到dd代理容器使用一个卷,我需要使用另一个容器中运行的代码访问该卷中的文件 我尝试使用:C# 从运行.Net core的不同容器访问docker卷文件,c#,docker,.net-core,C#,Docker,.net Core,我有一个docker compose,它运行许多容器,包括一个带有.Net核心代码的容器和一个dd代理容器 我注意到dd代理容器使用一个卷,我需要使用另一个容器中运行的代码访问该卷中的文件 我尝试使用: var path = System.Reflection.Assembly.GetExecutingAssembly().Location; var root = Path.GetPathRoot(path); var files = Directory.GetFiles(root, "*.lo
var path = System.Reflection.Assembly.GetExecutingAssembly().Location;
var root = Path.GetPathRoot(path);
var files = Directory.GetFiles(root, "*.log", SearchOption.AllDirectories);
但文件列表不包含我在运行以下操作时可以在卷中看到的文件:
docker run --rm -i -v=myvolume:/tmp/myvolume busybox find /tmp/myvolume
关于如何获取卷文件有什么想法吗
Docker compose:
version: "3.7"
volumes:
logs:
services:
localstack:
image: localstack/localstack
container_name: localstack
environment:
- SERVICES=s3,dynamodb
- AWS_DEFAULT_REGION=eu-west-1
- HOSTNAME_EXTERNAL=localstack
- HOSTNAME=localstack
- AWS_ACCESS_KEY_ID=test
- AWS_SECRET_ACCESS_KEY=test
ports:
- "4572:4572"
- "4569:4569"
aws-cli:
container_name: aws-cli
image: mesosphere/aws-cli
volumes:
- ./../script:/script
environment:
- AWS_DEFAULT_REGION=eu-west-1
- AWS_SECRET_ACCESS_KEY=test
- AWS_ACCESS_KEY_ID=test
entrypoint: /script/aws.sh
depends_on:
- localstack
dd-agent:
container_name: dd-agent
image: datadog/agent:latest
ports:
- "8126:8126"
environment:
- DD_APM_ENV=test
- DD_API_KEY={}
- DD_PROCESS_AGENT_ENABLED=true
- DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true
- DD_APM_ENABLED=true
- DD_APM_NON_LOCAL_TRAFFIC=true
- DD_LOG_LEVEL=info
- DD_HOSTNAME=datadoghq
volumes:
- logs:/var/log/datadog
myapi:
container_name: myapi
restart: unless-stopped
build:
target: final
args:
RELEASETYPE: "Debug"
context: ./../
dockerfile: path/Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
- DD_AGENT_HOST=dd-agent
- DD_ENV=test
- DD_LOGS_INJECTION=true
- DD_SERVICE_NAME=test
- DD_TRACE_AGENT_PORT=8126
- DD_TRACE_AGENT_URL=http://dd-agent:8126
- DD_TRACE_DEBUG=true
- DD_TRACE_ENABLED=true
- DD_TRACE_LOG_PATH=/var/log/datadog/dotnet-profiler.log
- FLUENTD_PORT=24224
- FLUENTD_RETRIES=3
volumes:
- logs:/var/log/datadog
- type: bind
source: ../src
target: /src/src
ports:
- 1990:80
depends_on:
- aws-cli
我认为您无法从另一个容器访问一个容器的文件。即使使用
docker cp
,您也只能将文件从容器复制到主机。也不允许从一个容器复制到另一个容器。我建议为您要访问的文件安装一个公共卷。这样,您就可以使用主机中装载的文件夹作为中介来访问它们
service:
service1:
volumes:
- ./temp_on_host:/path-to-the-directory-you-want-to-access-through-code
service2:
volumes:
- ./temp_on_host:/any_path_in_the_container_which_your_code_can_access
现在,service2中的代码可以间接访问service1中指定目录中的文件您需要将相同的卷装入两个容器中。如果您试图通过直接
docker run
命令执行操作,请注意,Compose将重命名卷和网络之类的内容,因此您需要使用docker volume ls
之类的命令来查找实际卷名。使用共享卷时,dd代理容器仍会将文件写入它创建的随机卷中,我可以获得该共享卷吗?是,只需在主机上挂载一些公共卷,并将两个目录连接到各自的容器中。不确定是否是最好的方法,但它是唯一的方法。发布docker compose了解更多详细信息我发布了我的docker compose,我看到日志卷由两个容器共享和链接,但它是空的,dd代理使用不同的自动创建卷这里的日志是什么?尝试在日志中创建一个文件,看看它是否反映在容器的映射目录中。告诉我这是否有效。我认为您应该给出像./logs或../logs之类的路径