도커 머신이 재시작시 데이터를 지우는 이유는 무엇입니까?


9

OSX에서 Docker Toolbox를 사용하고 있습니다.

영구 데이터를 저장하기 위해 데이터 볼륨 컨테이너를 만들었습니다 : https://docs.docker.com/userguide/dockervolumes/#creating-and-mounting-a-data-volume-container .

이 데이터가 실제로 컨테이너가 아닌 boot2docker VM (docker-machine에 의해 생성됨)에 저장되어 있는지 확인하여 데이터가 지속되도록합니다. 그러나 "docker-machine restart"는 vm에서이 사용자 정의 데이터를 지 웁니다.

무슨 일이 일어나고 있는지에 대한 문서를 찾을 수 없습니다. / var / lib / docker의 데이터가 보존 될 것이라고 언급 한 한 포럼 게시물을 찾았지만 공식 문서를 찾을 수 없으며 위의 영구 저장소 안내서 에서이 경로를 사용하지 않거나 심지어는 데이터가 삭제됩니다.

이것이 예상됩니까? 그렇다면 영구 데이터를 저장하기위한 올바른 경로에 공식 문서가 있습니까?


편집 : 실패한 시나리오의 예 추가

$ docker-machine ssh alt
docker@alt:~$ docker run -v /data:/var/lib/mysql --name mydata busybox sh -c "echo 'hello' > /var/lib/mysql/hello"
docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello"
hello
docker@alt:~$ exit
$ docker-machine restart alt
Starting VM...
$ docker-machine ssh alt
docker@alt:~$ docker run --rm --volumes-from mydata busybox sh -c "cat /var/lib/mysql/hello"
cat: can't open '/var/lib/mysql/hello': No such file or directory

답변:


8

이것은 분명히 작동해야합니다.

$ docker-machine ssh default
docker@default:~$ docker run -v /data --name mydata busybox true
docker@default:~$ docker run --volumes-from mydata busybox sh -c "echo hello >/data/hello"
docker@default:~$ docker run --volumes-from mydata busybox cat /data/hello
hello
docker@default:~$ exit
$ docker-machine restart default
Starting VM...
$ docker-machine ssh default
docker@default:~$ docker run --volumes-from mydata busybox cat /data/hello
hello

문제를 재현하기위한 단계를 자세히 설명 할 수 있습니까?

boot2docker에는 다음을 제외하고 읽기 전용 파일 시스템이 있습니다 (재부팅시 삭제됨).

  1. 컨테이너 및 해당 데이터 (볼륨)-이 내용을 읽습니다. /var/lib/docker
  2. 도커 이미지
  3. 도커 구성 (예 : /var/lib/boot2docker/profile데몬 플래그를 조정할 수있는 위치)

안녕하십니까, 귀하의 답변에 대한 수정안을 제안했습니다. 두 번째 세 번째 및 네 번째 실행 명령에서 비지 박스 이미지를 지정하려고 했습니까? 그렇게하지 않으면 docker는 "sh"및 "cat"이라는 이미지를 다운로드하려고 시도합니다. 위의 실패한 예를 추가하겠습니다.
Gerry

도와 주셔서 감사합니다. 당신과 @ mc0e 모두이 것을 도와주었습니다. 그래서 나는 진드기와 그에게 현상금을주었습니다 (둘 다 +1). 이 박람회를 고려하시기 바랍니다.
Gerry

1
아 맞다. 오타가 유감입니다.
nathanleclaire

사과 할 필요가 없습니다. 나는 오해하지 않았는지 확인하기 위해 두 번 확인했습니다. 이것에 대한 당신의 모든 도움을 응원합니다.
Gerry

6

boot2docker를 사용하지 않지만 재부팅시 / data가 지워지면 볼륨이 저장되는 위치 ( docker run -v /data:/var/lib/mysql)이므로 손실됩니다.

당신이하고있는 일은 또한 볼륨 지속성을 처리하기 위해 두 가지 패턴을 결합하는 것입니다. 지속성을 확보하기 위해 컨테이너는 호스트 시스템의 지정된 위치에서 볼륨을 마운트하거나 (영구적으로 추정되는) 데이터 컨테이너와 연관되어로 마운트 할 수 있습니다 --volumes-from. 호스트 파일 시스템 접근 방식이 boot2docker에 적합하지 않은 것처럼 들리므로 데이터 볼륨 패턴을 사용해야합니다.

아마도 당신은 당신의 데이터 컨테이너를 작성해야 -v /var/lib/mysql보다는 -v /data:/var/lib/mysql.


-v 플래그를 사용하여 볼륨을 작성한 다음 --volumes-from을 사용하여 다른 컨테이너에서 해당 컨테이너의 볼륨을 사용하는 것은 문서가 보여주는 것과 정확히 같습니다. docs.docker.com/userguide/dockervolumes/… -v 인 경우 / location은 그것이 / var / lib / docker / volumes에 상대적이어야한다는 것을 알고 콜론을 추가해도 변경되지 않아야합니다. 최소한 이것은 직관적이지 않습니다. -v / var / lib / mysql! = -v / var / lib / mysql : / var / lib / mysql 또한 mysql-docker 문서를 업데이트해야 할 것 같습니다 : hub.docker.com/_/mysql/#caveats
Gerry

도와 주셔서 감사합니다. 당신과 @nathanleclaire 모두이 것을 도왔으므로 (여러분의 가치가있는) 현상금을 주었고 nathanleclaire에게 진드기를주었습니다 (두 가지 모두 +1). 이것이 공정하다고 생각하기를 바랍니다.
Gerry

@Gerry 확실히 볼륨을 생성 한 다음 --volumes-from을 통해 사용하는 것이 좋습니다. 임시 / 데이터를 컨테이너에 마운트하는 것은 아닙니다.
mc0e

그래, 문제는 내가 다시 시작할 때까지 / data가 일시적이라는 것을 몰랐다.
Gerry

0

xhyve vm을 사용하는 mac beta 용 docker를 사용하고 있습니다.

/ var / lib / boot2docker의 내용은 컴퓨터를 다시 시작할 때까지 유지됩니다. 따라서 vm에서 특정 파일을 사용할 수있게하려면이 디렉토리에 넣으십시오.

도커 컨테이너를 실행하기 위해 다른 위치에서 액세스 할 수있게하려면 / var / lib / boot2docker / profile에 다음을 추가 할 수 있습니다.

mkdir -p /desired/path
ln -s /var/lib/boot2docker/your.file /desire/path/your.file

호스트 파일의 추가 값과 같이 vm 재시작 사이에 유지 될 다른 구성을 시스템 파일에 추가하려면 아래 명령과 같은 명령을 / var / lib / boot2docker / profile에 추가 할 수 있습니다.

echo '127.0.0.1 your.domain.com' >> /etc/hosts

그것이 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.