【问题标题】:How to build docker-ce from source on macOS如何在 macOS 上从源代码构建 docker-ce
【发布时间】:2018-11-21 07:26:16
【问题描述】:

有人知道是否有从源代码构建并用它替换 Mac 上的 docker 二进制文件的指南吗?

自述文件没有说所以我尝试了一些 make target 但得到了https://github.com/docker/for-mac/issues/3353

已编辑 确切地说,我试图做的是调试 docker cli,以查看为什么 Auth 不适用于我以前公司的单个开发人员,无论所有因素都经过检查和验证是否正确。

【问题讨论】:

  • 嗯,docker for mac 是否使用与 linux 版本相同的二进制文件?我还以为是定制的呢。
  • 我在 Make file: .PHONY: binary-osx binary-osx: ## build executable for macOS 中看到 ./scripts/build/osx
  • 啊,对,制定目标。我需要更多的咖啡。

标签: docker docker-machine


【解决方案1】:

为此,请查看 docker cli 的 repo(起初令人困惑的是 docker 的哪个部分位于何处)。但 cli 位于: git@github.com:docker/cli.git

构建它(这个构建分布适用于所有平台),假设你已经有makemake -f docker.Makefile binary cross

然后要么使用这个二进制文件(这是用于 Mac),例如: build/docker-darwin-amd64 pull mysql

或者用上面的二进制文件备份并替换你原来的/usr/local/bin/docker

【讨论】:

    【解决方案2】:

    由于您不会在 macOS 上运行引擎,因此您可以尝试不同的方法。使用 Makefile 构建 docker 客户端需要 docker 引擎和 docker 客户端,而您可能没有。

    我正在将 docker/cli 存储库中的 docker(客户端)构建为一个普通的 Go 项目:

    • 克隆仓库:

      $ git clone https://github.com/docker/cli.git
      
    • 构建master,或签出特定标签:

      $ git checkout v19.03.6
      
    • cd 进入 repo,创建 build 目录,并创建 require Go 项目结构:

      $ cd cli
      $ mkdir -p build/src/github.com/
      $ cd build/src/github.com/
      $ ln -s ../../.. cli
      
    • cd进入build目录并设置GOPATH:

      $ cd ../..
      $ export GOPATH=$(pwd)
      
    • 构建docker 客户端:

      $ go build github.com/docker/cli/cmd/docker
      
    • build目录复制二进制文件,例如:

      $ cp docker /usr/local/bin
      

    你会注意到一些与构建相关的信息没有设置:

    ./docker version
    Client:
     Version:           unknown-version
     API version:       1.40
     Go version:        go1.13.8
     Git commit:        unknown-commit
     Built:             unknown-buildtime
     OS/Arch:           darwin/amd64
     Experimental:      false
    

    您可以传递一个合适的 -ldflags 参数来设置这些变量,如下所示:

    $ go build \
        -ldflags \
        "-X github.com/docker/cli/cli/version.GitCommit=${docker_gitcommit} \
         -X github.com/docker/cli/cli/version.Version=${version} \
         -X \"github.com/docker/cli/cli/version.BuildTime=${build_time}\""
    

    如果您设置了docker_gitcommitversionbuild_time 变量。如果build_time 包含空格(就像上游的docker 二进制文件一样),则需要第三个标志中的转义引号。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      相关资源
      最近更新 更多