簡體   English   中英

從運行 .Net core 的不同容器訪問 docker 卷文件

[英]Access docker volume files from different container running .Net core

我有一個運行許多容器的 docker compose,包括一個帶有 .Net 核心代碼的容器和一個 dd-agent 容器。

我注意到 dd-agent 容器使用一個卷,我需要使用在另一個容器中運行的代碼訪問該卷中的文件。

我曾嘗試使用:

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-撰寫:

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中指定目錄下的文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM