如何在macOS上从源代码构建docker-ce

时间:2018-11-21 07:26:17

标签: docker docker-machine

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

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

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

2 个答案:

答案 0 :(得分:0)

要执行此操作,请签出docker cli的回购协议(起初混淆了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

答案 1 :(得分:0)

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

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

  • 克隆存储库:

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

    $ git checkout v19.03.6
    
  • cd进入存储库,创建构建目录,并创建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二进制文件一样),则必须在第三个标志中使用转义引号。

希望这会有所帮助。