2017-12-05 4 views
0

Config라는 폴더 아래에 구성 파일이있는 .net Core Web API가 있습니다. 터미널에서 이미지와 컨테이너를 만들었습니다. 컨테이너에 폴더와 구성 파일이 들어 있다는 것을 터미널을 올바르게 보았습니다. 특정 호스트에폴더를 덮어 쓰는 Docker 마운트

1) 마운트 구성 폴더 :

내 문제는 지금까지 내가 요구 사항을 물리적 경로로 구성 폴더를 바인딩 다음/같은 용기의 장착을 만들 수있는 방법을 찾을 수 있다는 것입니다 컨테이너 작성에 위치

2)의 구성 폴더 컨테이너 작성의 이미지

3)에있는 파일에 채워 져야 화상의 것들과 폴더에 이미 존재하는 임의의 기존 파일을 대체

4)

명령 만들어 내 호스트에서 폴더에 설정 파일을 사용자 정의 할 수 있습니다 : 경우, 문서에 명시된 바와 같이,

docker --tls -H="$containerUrl" ` 
     create ` 
     --hostname $hostname ` 
     --name $containerName ` 
     --mac-address=$containerMacAddress ` 
     --ip $containerIpAddress ` 
     --net "bridged-network" ` 
     --workdir '/app' ` 
     --mount type=bind,src=$configVolumePath,target=/app/Config ` 
     --publish "0.0.0.0::80" ` 
     -t ` 
     -i $imageName":"$script:buildversion  

유형 --mount바인드 사용을 폴더 안에는 컨테이너 내에 숨겨져있는 숨겨진 파일이 있고 응용 프로그램에 배포 된 파일이 표시됩니다. 이 솔루션의 문제점은 호스트의 config 폴더에있는 파일을 업데이트 할 수 없다는 것입니다.

이제 type = bind을 제거하면 혼동이됩니다. ":/응용 프로그램/구성 : RW"

나는 볼륨 --volume $의 configVolumePath를 사용하려고,하지만 무시하지 않는 호스트 디렉토리에 있으므로 사전 exising 파일을하고 사람들은 내에서 사용되는 하나 컨테이너.

추가 참고 사항, Dockerfile에 내용을 지정하거나 볼륨 마운팅과 관련된 내용을 지정하지 않았으므로 볼륨을 만들어 소스로 사용하지는 않겠지 만 생각하지 않습니다. 차이.

컨테이너 서버는 NAS에서 실행되며,이 버전입니다 : 분명히

Version:  1.11.2 
API version: 1.23 
Go version: go1.5.4 
Git commit: 781516c 
Built:  Thu Aug 3 16:04:05 2017 
OS/Arch:  linux/amd64 

내가 부족 뭔가 내가 고정 표시기에 대한 자세한 내용을 배울 수있다, 누구든지 도울 수 있는가?

내 참조 :

1) https://docs.docker.com/engine/admin/volumes/bind-mounts/

2) 모든 고정 표시기 볼륨의 https://docs.docker.com/engine/admin/volumes/volumes/

답변

1

첫 번째 또는 바인드 마운트 리눅스 마운트처럼 행동.

호스트 볼륨/마운트가 있고 파일이 들어 있으면 컨테이너에있는 모든 내용을 "대체"합니다. 그렇지 않으면 컨테이너 파일이 호스트 볼륨/mount에 미러링되고 컨테이너 폴더와 호스트가 동기화됩니다. 두 경우 모두 호스트의 파일 편집은 항상 컨테이너 내부에서 다시 선택됩니다.귀하의 경우에는

, 당신은 다음과 같은 작업을 수행 할 수

docker volume create --driver local \ 
    --opt type=none \ 
    --opt device=$configVolumePath \ 
    --opt o=bind \ 
    config_vol 

이 호스트에서 $ configVolumePath에 유지 될 볼륨을 생성합니다. 당신이 얻을 것이다 것은 시작에

docker create --volume config_vol:/app/Config 

, 호스트 폴더가 비어있을 것입니다 및 이미지에서 파일이 호스트 폴더에 "복사"됩니다

은 컨테이너가 해당 볼륨을 사용하여 생성 할 때. $configVolumePath에있는 파일을 편집하면 컨테이너 내부에서 파일을 편집하면 /app/Config 파일이 호스트의 $configVolumePath에 반영됩니다.

+0

yamenk에 감사드립니다. 그래서 제 문제는 폴더의 내용을 삭제하지 않는다는 것입니다. 볼륨을 만들려고했지만 설명대로 동작합니다. 내가 올바르게 이해했는지 다시 한번 확인하기 위해 볼륨의 실제 "사전"생성은 필요하지 않으며, 도커 생성의 일부분으로 볼륨 매개 변수를 전달하는 것으로 충분해야합니다. 나는 오늘 밤 그것을 시도 할 것입니다. --options 매개 변수를 통해 폴더 내용을 강제로 삭제/덮어 쓰는 방법이 있습니까? 스크립트를 실행하기 위해 필자는 매개 변수 --name config_vol을 사용해야한다고 제안했습니다. – Manuel

관련 문제