Pelo que sei, as imagens do docker são instaladas /var/lib/docker
quando são puxadas. Existe uma maneira de alterar esse local, como um volume montado como /mnt
?
Pelo que sei, as imagens do docker são instaladas /var/lib/docker
quando são puxadas. Existe uma maneira de alterar esse local, como um volume montado como /mnt
?
Respostas:
Nas versões recentes do Docker, você definiria o valor do data-root
parâmetro como seu caminho personalizado, em /etc/docker/daemon.json
(de acordo com https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file ).
Nas versões anteriores, é possível alterar o diretório base de armazenamento do Docker (para onde vão o contêiner e as imagens) usando a -g
opção ao iniciar o daemon do Docker. (cheque docker --help
). Você pode aplicar essa configuração automaticamente quando o Docker for iniciado, adicionando-o ao / etc / default / docker
-g
opção ao / etc / defaults / docker em vez de modificar o arquivo Upstart, veja minha resposta.
DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
graph
atributo no daemon.json foi descontinuado a partir da v17.05.0, use em data-root
vez disso, cf. stackoverflow.com/a/50217666/743507
Seguindo os conselhos dos comentários, utilizo a documentação do Docker systemd para melhorar esta resposta. O procedimento abaixo não requer reinicialização e é muito mais limpo.
Primeiro, crie diretório e arquivo para configuração personalizada:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf
Para a versão do docker antes da pasta 17.06-ce :
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --graph="/mnt"
Para janela de encaixe após a pasta 17.06-ce :
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --data-root="/mnt"
daemon.json
Eu tentei recentemente o procedimento acima com 17.09-ce no Fedora 25 e parece não funcionar. Em vez dessa simples modificação, /etc/docker/daemon.json
faça o truque:
{
"graph": "/mnt",
"storage-driver": "overlay"
}
Apesar do método, você precisa recarregar a configuração e reiniciar o Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
Para confirmar se o Docker foi reconfigurado:
docker info|grep "loop file"
Na versão recente (17.03), é necessário um comando diferente:
docker info|grep "Docker Root Dir"
A saída deve ficar assim:
Data loop file: /mnt/devicemapper/devicemapper/data
Metadata loop file: /mnt/devicemapper/devicemapper/metadata
Ou:
Docker Root Dir: /mnt
Em seguida, você pode remover com segurança o armazenamento antigo do Docker:
rm -rf /var/lib/docker
docker info
afirmação provavelmente está desatualizada. No Ubuntu 16.04, a verificação para reconfigurado é sudo docker info | grep "Docker Root Dir"
. Caso contrário, boa resposta, deve ser o único aceito;)
Docker Root Dir: /"/mnt"
quando você corre docker info|grep "Docker Root Dir"
, você tem que substituir --data-root="/mnt"
para --data-root=/mnt
dentro do arquivodocker-storage.conf
Para novas versões do docker, precisamos usar o data-root
que graph
está obsoleto na v17.05.0: documentos obsoletos oficiais
Edite /etc/docker/daemon.json
(se não existir, crie) e inclua:
{
"data-root": "/new/path/to/docker-data"
}
Em seguida, reinicie o Docker com:
sudo systemctl daemon-reload
sudo systemctl restart docker
Como não encontrei as instruções corretas para fazer isso no Fedora (EDIT: as pessoas apontaram nos comentários que isso também deve funcionar no CentOS e no Suse) (/ etc / default / docker não é usado lá), estou adicionando meu responda aqui:
Você precisa editar o arquivo / etc / sysconfig / docker e adicionar a opção -g na variável OPTIONS. Se houver mais de uma opção, coloque-as em "". No meu caso, esse arquivo continha:
OPTIONS=--selinux-enabled
então seria
OPTIONS="--selinux-enabled -g /mnt"
Após uma reinicialização ( systemctl restart docker
), o Docker deve usar o novo diretório
Não use um link simbólico para mover a pasta docker para / mnt (por exemplo). Isso pode causar problemas no comando docker rm .
Melhor usar a opção -g para janela de encaixe. No Ubuntu, você pode configurá-lo permanentemente em /etc/default/docker.io. Aprimore ou substitua a linha DOCKER_OPTS.
Aqui está um exemplo: `DOCKER_OPTS =" - g / mnt / em algum lugar / else / docker / "
docker rm
ao usar um link simbólico?
Ubuntu 16.04
stackoverflow.com/a/30219552/977622 para obtê-lo para o trabalho
Interromper o serviço de janela de encaixe
sudo systemctl stop docker
Mover o diretório docker existente para o novo local
sudo mv /var/lib/docker/ /path/to/new/docker/
Criar link simbólico
sudo ln -s /path/to/new/docker/ /var/lib/docker
Iniciar serviço docker
sudo systemctl start docker
sudo ln -s /path/to/new/docker/ /var/lib/docker
Esta solução funciona no Red Hat 7.2 & Docker 1.12.0
Edite o arquivo /lib/systemd/system/docker.service no seu editor de texto.
adicione -g / path / to / docker / no final da diretiva ExecStart . A linha completa deve ficar assim.
ExecStart=/usr/bin/dockerd -g /path/to/docker/
Execute o comando abaixo
systemctl daemon-reload
systemctl restart docker
Execute o comando para verificar o diretório do docker
docker info | grep "loop file\|Dir"
Se você tem arquivo / etc / sysconfig / docker no Red Hat ou no docker 1.7.1, verifique esta resposta.
Versão para copiar e colar da resposta vencedora :)
Crie este arquivo apenas com este conteúdo:
$ sudo vi /etc/docker/daemon.json
{
"graph": "/my-docker-images"
}
Testado Ubuntu 16.04.2 LTS
na janela de encaixe1.12.6
graph
atributo no daemon.json foi descontinuado a partir da v17.05.0, use em data-root
vez disso, cf. stackoverflow.com/a/50217666/743507
No CentOS 6.5
service docker stop
mkdir /data/docker (new directory)
vi /etc/sysconfig/docker
adicione a seguinte linha
other_args=" -g /data/docker -p /var/run/docker.pid"
salve o arquivo e inicie o docker novamente
service docker start
e fará o arquivo de repositório em /data/docker
Para Debian / Ubuntu ou Fedora, você provavelmente pode usar as outras respostas. Mas se você não possui arquivos abaixo /etc/default/docker
ou /etc/sysconfig/docker
, e seu sistema está executando o systemd, siga esta resposta pelo h3nrik . Estou usando o Arch, e isso funciona para mim.
Basicamente, você precisa configurar o systemd para ler o novo local da imagem do docker como uma variável de ambiente e passar essa variável de ambiente para o script de execução do daemon do Docker.
Para completar, aqui está a resposta de h3nrick:
Você tem um /lib/systemd/system/docker.service
arquivo?
Nesse caso, edite-o para que o serviço Docker use o habitual /etc/default/docker
como um arquivo de ambiente:EnvironmentFile=-/etc/default/docker
.
No /etc/default/docker
arquivo, adicione DOCKER_OPTS="-g /home/rseixas/Programs/Docker/images"
.
No final, basta fazer um systemctl daemon-reload && systemctl restart docker
.
Para mais informações, consulte também a documentação .
Uma solução muito mais simples é criar um ponto de link flexível para o que você quiser, como
link -s /var/lib/docker /mnt/whatever
Funciona para mim no meu servidor CentOS 6.5.
Conforme recomendado pelo @mbarthelemy, isso pode ser feito através da -g
opção ao iniciar o daemon do docker diretamente.
No entanto, se a janela de encaixe estiver sendo iniciada como um serviço do sistema, não é recomendável modificar o /etc/default/docker
arquivo. Há uma diretriz para isso localizada aqui .
A abordagem correta é criar um /etc/docker/daemon.json
arquivo nos sistemas Linux (ou Mac) ou %programdata%\docker\config\daemon.json
no Windows. Se esse arquivo não estiver sendo usado para mais nada, os seguintes campos deverão ser suficientes:
{
"graph": "/docker/daemon_files"
}
Isso pressupõe que o novo local em que você deseja que o docker persista, seus dados são /docker/daemon_files
No openSUSE Leap 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"
Observe que DOCKER_OPTS estava inicialmente vazio e tudo o que fiz foi adicionar o argumento para fazer o docker usar meu novo diretório
No Fedora 26 e provavelmente em muitas outras versões, você pode encontrar um erro após mover o local da pasta base, conforme descrito acima. Isso é particularmente verdadeiro se você o estiver movendo para algum lugar em / home. Isso ocorre porque o SeLinux entra em ação e impede que o contêiner do docker execute muitos de seus programas nesse local.
A solução curta é remover a opção --enable-selinux quando você adiciona o parâmetro -g.
Em um servidor AWS Ubuntu 16.04, coloquei as imagens do Docker em um EBS separado, montado em / home / ubuntu / kaggle /, sob o diretório do docker
Este trecho do meu script de inicialização funcionou corretamente
# 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
Para usuários de Mac na versão 17.06.0-ce-mac19, você pode simplesmente mover o local da Imagem do Disco da interface do usuário na opção de preferências Basta alterar o local da imagem do disco e ela funcionará (clicando em Mover imagem de disco ) e reiniciando a janela de encaixe. Usando essa abordagem, pude usar meu disco rígido externo para armazenar imagens do docker.