【发布时间】:2017-11-04 21:24:10
【问题描述】:
我有以下问题:
如何在 ubuntu 16.04 上运行具有实验性功能的 docker(例如图像压缩 docker build --squash=true... 以减小其大小)?
【问题讨论】:
标签: docker ubuntu-16.04
我有以下问题:
如何在 ubuntu 16.04 上运行具有实验性功能的 docker(例如图像压缩 docker build --squash=true... 以减小其大小)?
【问题讨论】:
标签: docker ubuntu-16.04
要打开实验性 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
【讨论】:
~/.docker/config.json,值是 "enabled",而不是 true
sudo service docker restart 会关闭所有正在运行的 docker 容器,请小心
我在我的 mac 上的 Ubuntu 18.04 VM 上尝试了这里的一切——没有任何效果。整个互联网都在说同样的话,但最终得到实验性开启的一件事是@Michael Haren 的小回答:
fyi- 要为客户端启用此功能,要创建的配置文件是
~/.docker/config.json,值是"enabled",而不是true
这对我来说意味着这样的事情:
$ mkdir ~/.docker
$ echo '{ "experimental": "enabled" }' > ~/.docker/config.json
$ sudo systemctl restart docker
$ docker version
...
Experimental: true
...
这应该是一个顶级答案。所以,感谢他们(对我来说,除了甜蜜的互联网业力点......)。
【讨论】:
如果你只想临时运行它/不修改文件,你可以export DOCKER_CLI_EXPERIMENTAL=enabled。下面为您的客户端打开实验模式。
$ docker version
Experimental: false
$ export DOCKER_CLI_EXPERIMENTAL=enabled
$ docker version
Experimental: true
【讨论】:
发布此内容以帮助那些在 macOS 上运行 docker 的人
您需要在两个文件上启用实验,一个是客户端,另一个是 docker 引擎
我建议手动打开文件,而不是直接回显到文件中,因为该文件可能有一些其他配置,您可能不想意外覆盖它们
对于客户端,请访问~/.docker/config.json,并在顶级配置中添加"experimental": "enabled",如下所示
{
"experimental" : "enabled",
"auths" : {
"harbor.xxx.com" : {
}
},
"credsStore" : "desktop"
}
对于 Docker 引擎,请访问 ~/.docker/daemon.json 并在顶级配置中添加 "experimental": true,如下所示
{
"features": {
"buildkit": true
},
"experimental": true,
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
}
}
请注意experimental 的“值”在客户端和服务器之间是不同的。
完成后,使用以下命令重新启动 docker
killall Docker && open /Applications/Docker.app
然后验证结果
docker version
【讨论】:
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
【讨论】:
我认为您可以在 Linux 上使用systemctl 解决此问题,如此 SO 上的https://stackoverflow.com/a/70460819/433814 所述。但是,首先您需要编辑正确的文件...如果您正在寻找类似的答案,这是在 MacOS 中设置它的方法。
ENABLED=true 或ENABLED=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
}
}
killall Docker && open /Applications/Docker.app
【讨论】: