docker-compose가 한 구문에서는 소스 디렉터리를 생성하지만 다른 구문에서는 생성하지 않는 이유는 무엇입니까?

docker-compose가 한 구문에서는 소스 디렉터리를 생성하지만 다른 구문에서는 생성하지 않는 이유는 무엇입니까?

docker-compose.yml다음 을 사용하여 볼륨 마운트(버전 3.7 사용)를 설정하는 내 파일의 다음 YAML 코드를 고려해보세요.짧은 형식 구문문서에 지정된 대로:

volumes:
    - ./logging:/var/log/cron

logging이는 내 호스트 컴퓨터의 상대 경로를 /var/log/cron컨테이너 내부의 폴더에 매핑합니다. 를 실행할 때 호스트 컴퓨터에 폴더가 없으면 Docker가 해당 폴더를 만듭니다 docker-compose up. logging거기 다 괜찮아요.

이제 위의 내용을 다음과 같이 변경하면긴 형식의 구문:

volumes:
    - type: bind
      source: ./logging
      target: /var/log/cron

이제 실행하면 호스트 컴퓨터에 폴더가 없으면 폴더가 docker-compose up생성되지 않습니다 . logging나는 얻다

Cannot create container for service app: b'Mount denied:\nThe source path "C:/Users/riptusk331/logging"\ndoesn\'t exist and is not known to Docker'

짧은 형식 구문은 존재하지 않는 경우 호스트 경로를 생성하지만 긴 형식은 그렇지 않고 오류가 발생하는 이유를 아는 사람이 있습니까?

Windows용 Docker Desktop을 사용합니다.

답변1

-v이것은 실제로 사람들이 해당 동작에 의존하여 만든 수천(수백만?) 개의 구현을 모두 손상시킬 수 있기 때문에 수정하고 싶지 않은 이전 구문의 "기능"(버그)이었습니다 .

Docker Swarm에 도입된 후 원래 Docker CLI 호출과 호환되도록 확장된 최신 --mount볼륨 구문은 실제로 문서화되지 않았고 의존해서는 안 되는 "예기치 않은 마법"이었기 때문에 이 기능을 명시적으로 다시 도입하지 않았습니다. .

관련 정보