问题描述
想要知道golang:1.7的父级Linux镜像是什么。他在使用docker history
命令时,得到了以下输出:
/bin/sh -c #(nop) COPY file:f6191f2c86edc9343569339f101facba47e886e33e29d70da6916ca6b1101a53 in /usr/local/bin/ 2.48kB /bin/sh -c #(nop) WORKDIR /go 0B /bin/sh -c mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" 0B /bin/sh -c #(nop) ENV PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 0B /bin/sh -c #(nop) ENV GOPATH=/go 0B /bin/sh -c set -eux; dpkgArch="$(dpkg --print-architecture)"; case "${dpkgArch##*-}" in amd64) goRelArch='linux-amd64'; goRelSha256='ad5808bf42b014c22dd7646458f631385003049ded0bb6af2efc7f1f79fa29ea' ;; armhf) goRelArch='linux-armv6l'; goRelSha256='fc5c40fb1f76d0978504b94cd06b5ea6e0e216ba1d494060d081e022540900f8' ;; i386) goRelArch='linux-386'; goRelSha256='99f79d4e0f966f492794963ecbf4b08c16a9a268f2c09053a5ce10b343ee4082' ;; ppc64el) goRelArch='linux-ppc64le'; goRelSha256='8b5b602958396f165a3547a1308ab91ae3f2ad8ecb56063571a37aadc2df2332' ;; s390x) goRelArch='linux-s390x'; goRelSha256='d692643d1ac4f4dea8fb6d949ffa750e974e63ff0ee6ca2a7c38fc7c90da8b5b' ;; *) goRelArch='src'; goRelSha256='1a67a4e688673fdff7ba41e73482b0e59ac5bd0f7acf703bc6d50cc775c5baba'; echo >&2; echo >&2 "warning: current architecture ($dpkgArch) does not have a corresponding Go binary release; will be building from source"; echo >&2 ;; esac; url="https://golang.org/dl/go${GOLANG_VERSION}.${goRelArch}.tar.gz"; wget -O go.tgz "$url"; echo "${goRelSha256} *go.tgz" | sha256sum -c -; tar -C /usr/local -xzf go.tgz; rm go.tgz; if [ "$goRelArch" = 'src' ]; then echo >&2; echo >&2 'error: UNIMPLEMENTED'; echo >&2 'TODO install golang-any from jessie-backports for GOROOT_BOOTSTRAP (and uninstall after build)'; echo >&2; exit 1; fi; export PATH="/usr/local/go/bin:$PATH"; go version 247MB /bin/sh -c #(nop) ENV GOLANG_VERSION=1.7.6 0B /bin/sh -c apt-get update && apt-get install -y --no-install-recommends g++ gcc libc6-dev make pkg-config && rm -rf /var/lib/apt/lists/* 139MB /bin/sh -c apt-get update && apt-get install -y --no-install-recommends bzr git mercurial openssh-client subversion procps && rm -rf /var/lib/apt/lists/* 123MB /bin/sh -c set -ex; if ! command -v gpg > /dev/null; then apt-get update; apt-get install -y --no-install-recommends gnupg2 dirmngr ; rm -rf /var/lib/apt/lists/*; fi 0B /bin/sh -c apt-get update && apt-get install -y --no-install-recommends ca-certificates curl wget && rm -rf /var/lib/apt/lists/* 44.6MB /bin/sh -c #(nop) CMD ["bash"] 0B /bin/sh -c #(nop) ADD file:a023a99f7d01868b164d63bfaf8aabc7f271659c69939c3854f041f5a3217428 in / 123MB
用户想要知道这个容器的基础发行版是什么,是ubuntu、alpine还是其他什么。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
根据Dockerfile,golang:1.7的父级Linux镜像是buildpack-deps:jessie-scm
,基于Debian Jessie发行版。
ADD file: ...
行显示了镜像中的第一层是通过从镜像外部添加一些文件创建的(类似于其他层中显示的“COPY”)。
根据Dockerfile参考:
ADD指令将新文件、目录或远程文件URL从<src>
复制到镜像的文件系统中的<dest>
路径。
感谢@JamesJJ的回答。为什么docker history
的输出中没有FROM
?FROM
实际上不会对层或镜像元数据进行任何更改。它只是表示使用这些现有的层/元数据启动新的镜像,所以它不会显示在docker history
中。如果你想将FROM
的值记录在你的镜像中,比如作为一个LABEL
,你可以将FROM
的值移到一个构建参数的默认值,像这样:https://gist.github.com/JamesJJ/224077352aa35642d9a2a4a4dabef44f。
正文完