如何在托管的 Ubuntu 代理上启用 Azure Pipelines 中的实验性 Docker 守护程序

Posted

技术标签:

【中文标题】如何在托管的 Ubuntu 代理上启用 Azure Pipelines 中的实验性 Docker 守护程序【英文标题】:How do enable Experimental Docker daemon in Azure Pipelines on hosted Ubuntu agent 【发布时间】:2018-09-26 11:43:38 【问题描述】:

我希望在构建 docker 映像时能够使用 --squash 开关,因为这会减少几 MB 的结果映像。

这需要为 docker 启用实验性功能。

执行docker --version 确认(应该)在托管的 Azure Pipelines 代理上关闭实验性功能。

Server:
 Engine:
  Version:  18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:    Thu Apr 26 07:15:30 2018
  OS/Arch:  linux/amd64
  Experimental: false

Linux 代理正在运行

Kernel Version: 4.15.0-1022-azure
Operating System: Ubuntu 16.04.4 LTS
OSType: linux
Architecture: x86_64

我尝试更改 /etc/systemd/system/docker.service.d/docker.conf/etc/docker/daemon.json 以使用/包含实验性标志,但未能成功启用它。

docker.conf

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// --experimental=tr

daemon.json

 
    "experimental": true 
 

但不确定我是否可以在托管代理上重新启动守护程序。

目前正在做 yaml 构建,从 bash 调用 docker,但在 web 界面中也没有看到任何关于实验性的东西。

如果我启动自己的 Ubuntu 虚拟机并在其上托管代理,则实验可以工作,但希望通过使用托管代理来避免成本和维护。

【问题讨论】:

Experimental flag 在 Ununtu VM 中运行良好,但在主机上不行?你能把你的 daemon.json 文件加起来吗? 添加了示例文件,但认为问题是 Azure Pipelines 托管代理不会让我重新启动守护程序,因此可能需要其他一些方法来打开实验模式。在我自己的机器上它运行良好,但我可以完全控制机器。 如果不重新启动 docker daemon,我认为它不会起作用。但是根据您上面的信息,您在 docker.conf 中配置错误。只需——实验就够了,不需要‘=true’。 【参考方案1】:

在 Ubuntu 映像中,您可以在 daemon.json 更新后简单地重新启动 docker 服务。我使用的脚本有两行:

echo ' "experimental": true ' | sudo tee /etc/docker/daemon.json
sudo service docker restart

【讨论】:

【参考方案2】:

在我的管道中的 docker build 任务之前使用以下脚本启用它。

- script: |
      echo ' "experimental": true ' | sudo tee /etc/docker/daemon.json
      sudo service docker restart
  displayName: 'Enable docker experimental features for squashing '

【讨论】:

以上是关于如何在托管的 Ubuntu 代理上启用 Azure Pipelines 中的实验性 Docker 守护程序的主要内容,如果未能解决你的问题,请参考以下文章

在 Azure Pipelines 托管 Linux 代理上运行 Cypress.io

Azure DevOps 构建管道自托管代理“设备上没有剩余空间”

在 Windows Server 2019 自托管代理上找不到 azure cli 扩展

Azure CDN - 启用 HTTP 压缩 - 托管 Web 角色

在windows vm上部署Azure Pipelines Agent

创建 Service Fabric 群集后启用反向代理