回答:
Dockerの最近のバージョンでは、data-root
パラメーターの値を/etc/docker/daemon.json
(https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-fileに従って)カスタムパスに設定します。)。
古いバージョンでは-g
、Dockerデーモンの起動時にオプションを使用して、Dockerのストレージベースディレクトリ(コンテナーとイメージが配置される場所)を変更できます。(チェックdocker --help
)。/ etc / default / dockerに追加することで、Dockerの起動時にこの設定を自動的に適用できます
-g
、Upstartファイルを変更する代わりに、/ etc / defaults / dockerにこのオプションを追加することだと思います。私の回答を参照してください。
DOCKER_OPTS="-dns 8.8.8.8 -dns 8.8.4.4 -g /mnt"
コメントからのアドバイスに従って、私はDocker systemdドキュメントを利用してこの回答を改善しています。以下の手順は再起動を必要とせず、よりクリーンです。
最初に、カスタム構成用のディレクトリとファイルを作成します。
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo $EDITOR /etc/systemd/system/docker.service.d/docker-storage.conf
17.06-ce以前の dockerバージョンの場合:
[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
私たちが使用する必要が新しいドッキングウィンドウのバージョンの場合data-root
のようにgraph
:v17.05.0で廃止され、公式廃止予定のドキュメント
編集/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は新しいディレクトリを使用する必要があります
シンボリックリンクを使用してdockerフォルダーを/ mntに移動しないでください(たとえば)。これはdocker rmに問題を引き起こす可能性がありますコマンドます。
dockerには-gオプションを使用することをお勧めします。Ubuntuでは、/ etc / default / docker.ioで永続的に設定できます。DOCKER_OPTS行を拡張または置換します。
ここに例: `DOCKER_OPTS ="-g / mnt / somewhere / else / docker / "
docker rm
シンボリックリンクを使用する場合、どのような問題が発生しますか?
Ubuntu 16.04
stackoverflow.com/a/30219552/977622仕事にそれを得るために
Dockerサービスを停止する
sudo systemctl stop docker
既存のDockerディレクトリを新しい場所に移動する
sudo mv /var/lib/docker/ /path/to/new/docker/
シンボリックリンクを作成する
sudo ln -s /path/to/new/docker/ /var/lib/docker
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ファイルを編集します テキストエディターでを。
ExecStartディレクティブの最後に-g / path / to / docker /を追加します。完全な行は次のようになります。
ExecStart=/usr/bin/dockerd -g /path/to/docker/
以下のコマンドを実行します
systemctl daemon-reload
systemctl restart docker
コマンドを実行してdockerディレクトリを確認します
docker info | grep "loop file\|Dir"
お持ちの場合は/ etc /のsysconfig /ドッキングウィンドウの Red Hatのか、ドッキングウィンドウ1.7.1チェックでファイルをこの答えを。
勝者の回答のコピーアンドペーストバージョン:)
このコンテンツのみでこのファイルを作成します。
$ sudo vi /etc/docker/daemon.json
{
"graph": "/my-docker-images"
}
上でテストされたUbuntu 16.04.2 LTS
ドッキングウィンドウで1.12.6
Debian / UbuntuまたはFedoraの場合、おそらく他の回答を使用できます。しかし、/etc/default/docker
またはの下にファイルがなく/etc/sysconfig/docker
、システムがsystemdを実行している場合は、h3nrikによるこの回答に従うことをお勧めします。私はArchを使用していますが、これでうまくいきます。
基本的に、新しいdockerイメージの場所を環境変数として読み取るようにsystemdを構成し、その環境変数をDockerデーモン実行スクリプトに渡す必要があります。
完全を期すために、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
ます。
詳細については、ドキュメントもご覧ください。
@mbarthelemyで推奨されているように、これはdocker -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
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"
DOCKER_OPTSは最初は空であり、Dockerが新しいディレクトリを使用するように引数に追加しただけであることに注意してください
AWS Ubuntu 16.04サーバーでは、Dockerイメージを/ home / ubuntu / kaggle /にマウントされた別のEBSのdocker dirの下に置きました
この初期化スクリプトのスニペットは正しく機能しました
# 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