如何在Ubuntu 16.04上运行带有实验功能的Docker

42

我有以下问题:

如何在Ubuntu 16.04上运行Docker实验性功能(例如使用镜像压缩docker build --squash=true...以减小其大小)?

6个回答

93

要启用实验性的Docker功能,请按以下方式创建文件:

sudo nano /etc/docker/daemon.json

并将下面的内容添加到其中

{ 
    "experimental": true 
} 

保存文件(使用CTRL + X和Enter),然后退出。在终端中输入:

sudo service docker restart

要检查实验功能是否已开启,请在终端中键入:

docker version

您应该看到 Experimental: true

更新

您可以使用此一行命令代替 nano:

echo $'{\n    "experimental": true\n}' | sudo tee /etc/docker/daemon.json

3
注意这个一行更新的限制: 它试图“追加”,但如果你已经有一个配置文件,它会破坏文件格式。 - Mike Schroll
sudo sh -c 'echo "$(cat /etc/docker/daemon.json) {"experimental": true}" |jq -s add |sponge /etc/docker/daemon.json && service docker restart' - caduceus
12
为了让客户端启用此功能,需要创建配置文件~/.docker/config.json,值为"enabled",而不是true。请注意,本文不提供解释。 - Michael Haren
不确定,但我认为 sudo service docker restart 将关闭任何正在运行的 Docker 容器,请小心。 - alan.elkin

18

我在我的 Mac 上的 Ubuntu 18.04 虚拟机上尝试了这里的所有方法,但都没有成功。整个互联网上都说同样的话,但最终让实验性功能开启的是 @Michael Haren 的简短回答:

提醒一下 - 要为客户端启用此功能,则要创建的配置文件是 ~/.docker/config.json,且值为 "enabled",而不是 true

对于我来说,这意味着:

$ mkdir ~/.docker
$ echo '{ "experimental": "enabled" }' > ~/.docker/config.json
$ sudo systemctl restart docker
$ docker version
  ...
  Experimental: true
  ...

这应该是一个顶级答案。所以,归功于他们(除了我得不到甜美的互联网声望积分...)。


1
很不幸,在Ubuntu 20.04上这并没有起作用,但是@Kamil的答案确实有效。 - luv2learn
请注意,OP指定了16.04,因此它可能适用于16.04或者在2020年3月回答时可能已经适用。 - luv2learn
1
这是最佳答案! - Vivek Sampara

10
如果你只想暂时运行它/而不修改文件,你可以export DOCKER_CLI_EXPERIMENTAL=enabled。下面的命令将为您的客户端打开实验模式。

``` 如果您只想暂时运行它/而不修改文件,则可以导出DOCKER_CLI_EXPERIMENTAL=enabled。以下代码将为您的客户端打开实验模式。 ```
$ docker version
 Experimental:      false
$ export DOCKER_CLI_EXPERIMENTAL=enabled
$ docker version
 Experimental:      true

2

我认为你可以像https://dev59.com/j1cP5IYBdhLWcg3weJ1R#70460819上的SO描述的那样,在Linux上使用systemctl来解决这个问题。但是,首先你需要编辑正确的文件...如果你正在寻找类似的答案,以下是在MacOS中设置它的方法。

使用实验功能运行Docker MacOS

  • 只需设置变量ENABLED=trueENABLED=false,此脚本将自动打开或关闭它,并写入文件

注意:你必须安装jq才能执行和原地更新。

ENABLED=true; \

CONFIG=~/.docker/config.json; DAEMON=~/.docker/daemon.json ; \

cat <<< $(jq --argjson V ${ENABLED} '.experimental = $V' ${DAEMON}) > ${DAEMON} ; \
cat <<< $(jq --arg V $(if [ "${ENABLED}" = "true" ]; then echo "enabled"; else echo "disabled"; fi) '.experimental = $V' ${CONFIG}) > ${CONFIG} ; \ 

cat ~/.docker/config.json ; \
cat ~/.docker/daemon.json

输出确认

  • 这将自动输出确认
{
  "auths": {
    "https://index.docker.io/v1/": {},
    "registry.gitlab.com": {}
  },
  "credsStore": "desktop",
  "experimental": "enabled",
  "currentContext": "default"
}
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": true,
  "features": {
    "buildkit": true
  }
}

在MacOS中重启Docker引擎

  • 只需运行以下命令
killall Docker && open /Applications/Docker.app

参考资料


2

我发布这篇文章是为了帮助那些在 macOS 上运行 Docker 的人。

你需要在两个文件上启用实验性功能,一个是客户端,另一个是 Docker 引擎。

我建议手动打开文件,而不是直接将内容输出到文件中,因为该文件可能包含其他配置,你可能不想意外覆盖它们。

对于客户端,请访问 ~/.docker/config.json,并在顶级配置下方添加 "experimental": "enabled"

{
  "experimental" : "enabled",
  "auths" : {
    "harbor.xxx.com" : {

    }
  },
  "credsStore" : "desktop"
}

对于Docker Engine,请访问~/.docker/daemon.json并在顶层配置中添加以下内容:"experimental": true

{
  "features": {
    "buildkit": true
  },
  "experimental": true,
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  }
}


请注意,客户端和服务器端的experimental的“value”是不同的。
完成后,请使用以下命令重新启动docker。
killall Docker && open /Applications/Docker.app

然后验证结果。
docker version

1
sudo sed -i 's/ExecStart=\/usr\/bin\/dockerd -H fd:\/\/ --containerd=\/run\/containerd\/containerd.sock/ExecStart=\/usr\/bin\/dockerd -H fd:\/\/ --containerd=\/run\/containerd\/containerd.sock --experimental/g' /lib/systemd/system/docker.service
sudo systemctl daemon-reload
sudo systemctl restart docker

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

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