Docker的daemon.json在哪里?(丢失)

98

来自文档:

在Linux上配置文件的默认位置是/etc/docker/daemon.json

但是在我的新安装的Docker中我没有这个文件:

# docker --version
Docker version 17.03.1-ce, build c6d412e
# ls -la /etc/docker/
total 12
drwx------  2 root root 4096 Apr 28 17:58 .
drwxr-xr-x 96 root root 4096 Apr 28 17:58 ..
-rw-------  1 root root  244 Apr 28 17:58 key.json
# lsb_release -cs
trusty
8个回答

125
在Linux上,默认的配置文件路径是像您所说的那样/etc/docker/daemon.json,但默认情况下不存在。你可以自己编写一个配置文件,将其他docker守护程序配置内容放在其中,而不是通过命令行传递这些配置选项。你甚至不需要执行dockerd --config-file /etc/docker/daemon.json,因为那是默认路径,但对于检查系统的其他人来说,显式指定该路径可能很有用。
此外,请确保在/etc/docker/daemon.json中设置的任何配置不会与通过命令行调用dockerd时传递的选项发生冲突。供参考:

在配置文件中设置的选项不能与通过标志设置的选项发生冲突。如果文件和标志之间存在重复的选项,无论其值如何,docker守护程序均无法启动。


14
那么,在安装完docker-ce后没有daemon.json是完全正常的,对吗? - floatingpurr
2
+1 @floatingpurr 对我来说很正常 - 基于以下两点:1)我的安装默认情况下没有它,2)我认为背后的思想是使用“发现”方法,即docker发现此可选文件的存在。通过不将其放在那里,我们可以确定将使用默认设置。 - therobyouknow
8
太荒谬了。Dockers文档说你需要更改iptables文件中的一个标志。这可能是文档问题,也可能是docker中缺少该文件导致的bug。 - John
8
您如何查看当前运行的Docker守护进程正在指向哪个配置? - red888
2
根据 dockerd 文档:Linux 上配置文件的默认位置为 /etc/docker/daemon.json。可以使用 --config-file 标志来指定非默认位置。(参见 https://docs.docker.com/engine/reference/commandline/dockerd/) - Mugen
显示剩余2条评论

10
如果您在安装Ubuntu时安装了Docker,则Docker将作为一个snap安装。
配置文件可以在/var/snap/docker/current/config/daemon.json中找到。
请参考https://github.com/docker-archive/docker-snap/issues/22#issuecomment-423361607 摘要:
anonymouse64 commented on 21 Sep 2018

Modifying the daemon.json file is now supported in the version of the snap
I have published in the edge channel. The daemon is now hard-coded to read
the config file for it's settings, so you can now edit the daemon.json
located in $SNAP_DATA/config/daemon.json (on Ubuntu for example $SNAP_DATA
is /var/snap/docker/current, it may be different on your distribution) and
then restart docker for the changes to take effect with:

sudo snap restart docker

You may switch the snap to the edge channel to test this by running:

sudo snap refresh docker --edge

The changes in the edge channel should show up in stable in a short while
if you don't wish to use edge.

这个问题现在似乎已经存在于“stable”版本中。我正在使用Ubuntu 20.04,我在/var/snap/docker/current/config/daemon.json中找到了daemon.json文件。
我将'log-driver'更改为'local',并在重启后由docker接收到。
docker info --format '{{.LoggingDriver}}'
json-file
nano /var/snap/docker/current/config/daemon.json
    # added line:  "log-driver":"local",
snap restart docker
docker info --format '{{.LoggingDriver}}'
local

1
Ubuntu中使用snap安装的特定用户的config.json文件位于~/snap/docker/current/.docker/config.json - Jarek

4

根据@huu的回答,我在文档中搜索了具体的参考资料。

请注意以下粗体句子。


参考资料1:来自配置Docker守护程序部分:

有两种方法可以配置Docker守护程序:

  • 使用JSON配置文件。这是首选选项,因为它将所有配置保留在单个位置。

  • 启动 dockerd 时使用标志。您可以同时使用这两个选项,只要不将相同的选项指定为标志和JSON文件中的选项即可。如果发生这种情况,Docker守护程序将无法启动并打印错误消息。

要使用JSON文件配置Docker守护程序,请在Linux系统上创建文件 /etc/docker/daemon.json,或者在Windows上创建 C:\ProgramData\docker\config\daemon.json。在MacOS上,转到 任务栏中的鲸鱼 > 首选项 > 守护程序 >高级。


参考资料2:来自启用调试部分。

有两种方法可以启用调试。推荐的方法是在daemon.json文件中将debug键设置为true。此方法适用于所有Docker平台。

  1. 编辑通常位于/etc/docker/下的daemon.json文件。如果该文件尚不存在,则可能需要创建此文件。在macOS或Windows上,不要直接编辑该文件。相反,请转到首选项/守护程序/高级。

  2. ....


创建文件并不意味着它默认不存在。 - astef
我刚刚在文档中添加了参考资料,基本上是说如果它不存在 - 就创建它 (: - RtmY

4

我使用的是Ubuntu 20.04操作系统。如果目录不存在,可以在/etc/docker目录下创建。这对我很有效。


1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

3

Docker 19+,Mac

配置文件现在可以在~/.docker/daemon.json中找到。


1

对于我在Mac上,它位于/Users/your-username/.docker


老兄,那是存放 Docker CLI 配置文件的文件夹,不是 Docker 守护进程的。 - Yuriy Vasylenko
我不同意上面@IuriiVasylenko的说法,~/.docker/daemon.json正是我也找到它的地方。 - chahu418
@chahu418 这是老掉牙的话题,在最近的版本中,显然你是正确的:https://dev59.com/AlkT5IYBdhLWcg3wT91f#57221633 - Yuriy Vasylenko
问题是关于Ubuntu操作系统的。 - rok

1
在 Windows 10 Home 上,Docker v24 的 daemon.json 路径是:

%USERPROFILE%/.docker


0
我现在使用的是M1 MacOS,并安装了最新的Docker Desktop。您可以通过打开“Docker Desktop”>“首选项”>“Docker引擎”来找到daemon.json>在“通过键入json Docker守护程序配置文件来配置Docker守护程序”的文本编辑器下进行编辑>“应用并重启”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接