[컴] Dockerfile 내의 VOLUME command 와 -v 의 차이

 도커 / volume 사용법 / docker volume

Dockerfile 내의 VOLUME command 와 -v 의 차이

FROM openjdk:8u131-jdk-alpine 
VOLUME vol1 vol2

이것을 build 하고,

docker build -t img1 .

run 하면 아래처럼 error 가 발생한다. ref. 1 의 글을 참고하면, 이것은 linux 에서는 host쪽에 자동으로 /var/lib/docker/volumes 아래에 volume 을 만드는 듯 하다. 하지만 windows 라서 path 가 맞지 않아서 생성을 못하는 것 같다.

D:\a\prog\docker\t1>docker run --rm -it img1
docker: Error response from daemon: OCI runtime create failed: invalid mount {Destination:vol2 Type:bind Source:/var/lib/docker/volumes/245942a444e963ec3058dc851e28c5726c68864e839b8362c98dc3ffd9f6cac1/_data Options:[rbind]}: mount destination vol2 not absolute: unknown.

parameter 로 -v /vol3 를 줄때도 마찬가지 error 가 보인다.

D:\a\prog\docker\t1>docker run --rm -v /vol3 -it img1
docker: Error response from daemon: OCI runtime create failed: invalid mount {Destination:vol1 Type:bind Source:/var/lib/docker/volumes/32165906fe33fc1fdbe12215b82290e3d01418235f109c446e376e19941b5202/_data Options:[rbind]}: mount destination vol1 not absolute: unknown.

Dockerfile 안의 VOLUME volname1-v /volname1 와 같다.

  • Dockerfile 안에서 정의한 VOLUME volname1 : 자동으로 해당하는 volume을 host 의 /var/lib/docker/volumes 아래 만든다.
  • parameter -v /volname1 : VOLUME volname1 과 마찬가지로, 자동으로 해당하는 volume을 host 의 /var/lib/docker/volumes 아래 만든다.

windows 에서는 제외해야 한다.

위에서 보듯이 /var/lib/docker/volumes path 가 windows 에서는 없기 때문에, windows 에서도 run 을 하고 싶다면, Dockerfile 내의 VOLUME 은 제외해야 한다.

windows 에서 volume 은 아래 같은 방식을 사용하면 된다.

docker run -it -v D:/a/prog/docker/t1/src:/src img1

chmod 이 필요한 경우 주의해야 한다.

windows 의 directory 를 docker container 에 mount 를 했는데, 이 때 application 에서 chmod 를 했지만, 항상 777 로 유지됐다. 실제로 bash 로 가서 chmod 를 해도 결과는 비슷했다.

비슷한 이슈는 다음 링크들을 참고하자.

See Also

  1. Use volumes | Docker Documentation
  2. 쿠…sal: [컴] docker 의 보안이슈, loginuid

References

  1. docker - Understanding “VOLUME” instruction in DockerFile - Stack Overflow

댓글 없음:

댓글 쓰기