답변:
Docker의 최신 버전에서는 https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file
에 따라 data-root
매개 변수 값 을 사용자 정의 경로로 설정합니다 ./etc/docker/daemon.json
이전 버전에서는 -g
Docker 데몬을 시작할 때 옵션을 사용하여 Docker의 스토리지 기본 디렉토리 (컨테이너 및 이미지가있는 위치)를 변경할 수 있습니다 . (확인 docker --help
). Docker가 시작될 때 / etc / default / docker 에 추가하여이 설정을 자동으로 적용 할 수 있습니다.
-g
Upstart 파일을 수정하는 대신 이 옵션을 / etc / defaults / docker에 추가하는 것입니다. 내 대답을 참조하십시오.
DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
graph
daemon.json 의 속성은 v17.05.0부터 사용되지 않으며 data-root
대신 cf를 사용하십시오. stackoverflow.com/a/50217666/743507
의견의 조언에 따라 Docker 시스템 설명서 를 사용 하여이 답변을 향상시킵니다. 아래 절차는 재부팅이 필요하지 않으며 훨씬 깨끗합니다.
먼저 사용자 정의 구성을위한 디렉토리 및 파일을 작성하십시오.
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf
17.06-ce 붙여 넣기 이전의 도커 버전 :
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"
17.06-ce 페이스트 후 도커의 경우 :
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"
daemon.json
최근 에 Fedora 25에서 17.09-ce로 위의 절차를 시도했지만 작동하지 않는 것 같습니다. 그 간단한 수정 대신 /etc/docker/daemon.json
트릭 을 수행하십시오.
{
"graph": "/mnt",
"storage-driver": "overlay"
}
방법에도 불구하고 구성을 다시로드하고 Docker를 다시 시작해야합니다.
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker가 재구성되었는지 확인하려면 다음을 수행하십시오.
docker info|grep "loop file"
최신 버전 (17.03)에서는 다른 명령이 필요합니다.
docker info|grep "Docker Root Dir"
출력은 다음과 같아야합니다.
Data loop file: /mnt/devicemapper/devicemapper/data
Metadata loop file: /mnt/devicemapper/devicemapper/metadata
또는:
Docker Root Dir: /mnt
그런 다음 이전 Docker 저장소를 안전하게 제거 할 수 있습니다.
rm -rf /var/lib/docker
docker info
문은 아마 오래된됩니다. Ubuntu 16.04에서 재구성 확인은 sudo docker info | grep "Docker Root Dir"
입니다. ) 그렇지 않으면, 좋은 답변은 허용 하나 여야합니다
Docker Root Dir: /"/mnt"
당신이 실행될 때 docker info|grep "Docker Root Dir"
, 당신은 교체해야 --data-root="/mnt"
으로 --data-root=/mnt
파일 내부docker-storage.conf
새로운 도커 버전의 경우 v17.05.0에서 더 이상 사용되지 않는 data-root
것처럼 graph
사용해야합니다 : 공식 사용되지 않는 문서
편집하고 /etc/docker/daemon.json
(존재하지 않는 경우 작성) 다음을 포함하십시오.
{
"data-root": "/new/path/to/docker-data"
}
그런 다음 Docker를 다음과 같이 다시 시작하십시오.
sudo systemctl daemon-reload
sudo systemctl restart docker
Fedora 에서이 작업을 수행하는 올바른 지침을 찾지 못했기 때문에 (편집 : CentOS 및 Suse에서도 작동해야한다는 의견을 지적한 사람들) (/ etc / default / docker는 사용되지 않음) 여기에 대답하십시오 :
/ etc / sysconfig / docker 를 편집 하고 OPTIONS 변수에 -g 옵션을 추가해야합니다. 옵션이 둘 이상인 경우 ""로 묶어야합니다. 필자의 경우 해당 파일에는 다음이 포함되어 있습니다.
OPTIONS=--selinux-enabled
그래서 그것은 될 것입니다
OPTIONS="--selinux-enabled -g /mnt"
다시 시작한 후 ( systemctl restart docker
) Docker는 새 디렉토리를 사용해야합니다
도커 폴더를 / mnt로 이동하기 위해 심볼릭 링크를 사용하지 마십시오 (예 :). docker rm 명령 에 문제가 발생할 수 있습니다 .
도커에는 -g 옵션을 사용하는 것이 좋습니다. 우분투에서는 /etc/default/docker.io에서 영구적으로 설정할 수 있습니다. DOCKER_OPTS 라인을 향상 시키거나 교체하십시오.
예를 들면 다음과 같습니다.`DOCKER_OPTS = "-g / mnt / somewhere / else / docker /"
docker rm
심볼릭 링크를 사용할 때 어떤 종류의 문제가 발생합니까 ?
Ubuntu 16.04
stackoverflow.com/a/30219552/977622 에서 이것을해야했다
도커 서비스 중지
sudo systemctl stop docker
기존 도커 디렉토리를 새 위치로 이동
sudo mv /var/lib/docker/ /path/to/new/docker/
심볼릭 링크 만들기
sudo ln -s /path/to/new/docker/ /var/lib/docker
도커 서비스 시작
sudo systemctl start docker
sudo ln -s /path/to/new/docker/ /var/lib/docker
이 솔루션은 Red Hat 7.2 및 Docker 1.12.0 에서 작동합니다
텍스트 편집기에서 /lib/systemd/system/docker.service 파일을 편집하십시오 .
추가 -g / 경로 /로 / 고정 표시기 /를 의 말에 ExecStart의 지시어. 완전한 줄은 다음과 같아야합니다.
ExecStart=/usr/bin/dockerd -g /path/to/docker/
아래 명령을 실행
systemctl daemon-reload
systemctl restart docker
docker directory를 확인하는 명령을 실행하십시오.
docker info | grep "loop file\|Dir"
당신이있는 경우 / 등은 / SYSCONFIG / 고정 표시기 레드햇에서 파일이나 고정 표시기 1.7.1 확인 이 대답을.
승자 답변의 복사하여 붙여 넣기 버전 :)
이 컨텐츠만으로이 파일을 작성하십시오.
$ sudo vi /etc/docker/daemon.json
{
"graph": "/my-docker-images"
}
Ubuntu 16.04.2 LTS
도커에서 테스트1.12.6
graph
daemon.json 의 속성은 v17.05.0부터 사용되지 않으며 data-root
대신 cf를 사용하십시오. stackoverflow.com/a/50217666/743507
데비안 / 우분투 또는 페도라의 경우 다른 답변을 사용할 수 있습니다. 그러나 /etc/default/docker
또는 아래에 파일이없고 /etc/sysconfig/docker
시스템이 systemd를 실행중인 경우 h3nrik의이 답변 을 따르고 싶을 수 있습니다. . 나는 아치를 사용하고 있으며 이것은 나를 위해 작동합니다.
기본적으로, 새로운 docker 이미지 위치를 환경 변수로 읽고 해당 환경 변수를 Docker 데몬 실행 스크립트로 전달하도록 systemd를 구성해야합니다.
완성도를 높이기 위해 h3nrick의 답변은 다음과 같습니다.
당신은 /lib/systemd/system/docker.service
파일을?
그렇다면 Docker 서비스가 평소 /etc/default/docker
를 환경 파일로 사용하도록 편집 하십시오.EnvironmentFile=-/etc/default/docker
.
에서 /etc/default/docker
파일 다음 추가DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images"
.
결국에는 그냥 systemctl daemon-reload && systemctl restart docker
.
자세한 내용은 설명서를 참조하십시오 .
훨씬 간단한 해결책은 다음과 같이 원하는 곳에 소프트 링크 포인트를 만드는 것입니다.
link -s /var/lib/docker /mnt/whatever
CentOS 6.5 서버에서 작동합니다.
@mbarthelemy가 추천 한 것처럼 -g
docker 데몬을 직접 시작할 때 옵션을 통해 수행 할 수 있습니다 .
그러나도 커가 시스템 서비스로 시작된 경우 /etc/default/docker
파일 을 수정하지 않는 것이 좋습니다 . 이 위치에 대한 가이드 라인이 여기가 .
올바른 접근 방법은 /etc/docker/daemon.json
Linux (또는 Mac) 시스템 또는 %programdata%\docker\config\daemon.json
Windows 에서 파일 을 작성하는 것 입니다. 이 파일을 다른 용도로 사용하지 않는 경우 다음 필드로 충분합니다.
{
"graph": "/docker/daemon_files"
}
이것은 docker가 데이터를 유지하려는 새 위치가 있다고 가정합니다. /docker/daemon_files
오픈 수 세리프 42.1
$cat /etc/sysconfig/docker
## Path : System/Management
## Description : Extra cli switches for docker daemon
## Type : string
## Default : ""
## ServiceRestart : docker
#
DOCKER_OPTS="-g /media/data/installed/docker"
DOCKER_OPTS는 처음에 비어 있었고 Docker가 새 디렉토리를 사용하도록 인수에 추가 한 모든 것입니다.
AWS Ubuntu 16.04 서버에서 Docker 이미지를 / home / ubuntu / kaggle /의 docker dir 아래에 마운트 된 별도의 EBS에 배치했습니다.
이 초기화 스크립트 스 니펫이 올바르게 작동했습니다.
# where are the images initially stored?
sudo docker info | grep "Root Dir"
# ... not where I want them
# modify the configuration files to change to image location
# NOTE this generates an error
# WARNING: Usage of loopback devices is strongly discouraged for production use.
# Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
# see /programming/31620825/
# warning-of-usage-of-loopback-devices-is-strongly-discouraged-for-production-use
sudo sed -i ' s@#DOCKER_OPTS=.*@DOCKER_OPTS="-g /home/ubuntu/kaggle/docker"@ ' /etc/default/docker
sudo chmod -R ugo+rw /lib/systemd/system/docker.service
sudo cp /lib/systemd/system/docker.service /etc/systemd/system/
sudo chmod -R ugo+rw /etc/systemd/system/
sudo sed -i ' s@ExecStart.*@ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://@ ' /etc/systemd/system/docker.service
sudo sed -i '/ExecStart/a EnvironmentFile=-/etc/default/docker' /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info | grep "Root Dir"
# now they're where I want them