도커 / 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 를 해도 결과는 비슷했다.
비슷한 이슈는 다음 링크들을 참고하자.
- chown: changing ownership of ‘/var/lib/mysql/’: Operation not permitted · Issue #149 · MariaDB/mariadb-docker · GitHub
- docker - why doesn’t chown work in Dockerfile? - Stack Overflow
댓글 없음:
댓글 쓰기