如何使用GOLang官方镜像导入冷门包到Docker?
How to import an unpopular package to Docker using the GOLang official image?
我已经将这个问题作为问题发布在 imagick git 存储库中,但它的用户群非常小,所以我希望能从这里得到一些帮助。几天来,我一直在尝试使用我正在处理的项目的官方 goLang docker 文件将 https://github.com/gographics/imagick 导入 Docker,但没有成功。由于此软件包不受欢迎,运行ning apt-get 将无法使用。我(犹豫地)试图将文件添加到容器中,但那没有用。这是我构建的 DockerFile 及其产生的错误:
===DOCKER文件===
# 1) Use the official go docker image built on debian.
FROM golang:latest
# 2) ENV VARS
ENV GOPATH $HOME/<PROJECT>
ENV PATH $HOME/<PROJECT>/bin:$PATH
# 3) Grab the source code and add it to the workspace.
ADD . /<GO>/src/<PROJECT>
ADD . /<GO>/gopkg.in
# Trying to add the files manually... Doesn't help.
ADD . /opt/local/share/doc/ImageMagick-6
# 4) Install revel and the revel CLI.
#(The commented out code is from previous attempts)
#RUN pkg-config --cflags --libs MagickWand
#RUN go get gopkg.in/gographics/imagick.v2/imagick
RUN go get github.com/revel/revel
RUN go get github.com/revel/cmd/revel
# 5) Does not work... Can't find the package.
#RUN apt-get install libmagickwand-dev
# 6) Get godeps from main repo
RUN go get github.com/tools/godep
# 7) Restore godep dependencies
WORKDIR /<GO>/src/<PROJECT>
RUN godep restore
# 8) Install Imagick
#RUN go build -tags no_pkgconfig gopkg.in/gographics/imagick.v2/imagick
# 9) Use the revel CLI to start up our application.
ENTRYPOINT revel run <PROJECT> dev 9000
# 10) Open up the port where the app is running.
EXPOSE 9000
===结束 DOCKER文件===
这允许我构建 docker 容器,但是当我尝试 运行 它时,我在运动学日志中收到以下错误:
===DOCKER 错误===
ERROR 2016/08/20 21:15:10 build.go:108: # pkg-config --cflags MagickWand MagickCore MagickWand MagickCore
pkg-config: exec: "pkg-config": executable file not found in $PATH
2016-08-20T21:15:10.081426584Z
ERROR 2016/08/20 21:15:10 build.go:308: Failed to parse build errors:
#pkg-config --cflags MagickWand MagickCore MagickWand MagickCore
pkg-config: exec: "pkg-config": executable file not found in $PATH
2016-08-20T21:15:10.082140143Z
===结束 DOCKER 错误===
大多数基本映像都删除了包列表以避免减小映像大小。因此,为了使用 apt-get
安装某些东西,您首先需要更新包列表,然后安装您想要的任何包。然后,在安装包之后,删除 运行 apt 的所有副作用以避免用不需要的文件污染图像(所有这些都必须作为单个 RUN
命令)。
以下 Dockerfile 应该可以解决问题:
FROM golang:latest
RUN apt-get update \ # update package lists
&& apt-get install -y libmagickwand-dev \ # install the package
&& apt-get clean \ # clean package cache
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # remove everything else
RUN go get gopkg.in/gographics/imagick.v2/imagick
记得将-y
添加到apt-get install
,因为docker build
是非交互式的。
我已经将这个问题作为问题发布在 imagick git 存储库中,但它的用户群非常小,所以我希望能从这里得到一些帮助。几天来,我一直在尝试使用我正在处理的项目的官方 goLang docker 文件将 https://github.com/gographics/imagick 导入 Docker,但没有成功。由于此软件包不受欢迎,运行ning apt-get 将无法使用。我(犹豫地)试图将文件添加到容器中,但那没有用。这是我构建的 DockerFile 及其产生的错误: ===DOCKER文件===
# 1) Use the official go docker image built on debian.
FROM golang:latest
# 2) ENV VARS
ENV GOPATH $HOME/<PROJECT>
ENV PATH $HOME/<PROJECT>/bin:$PATH
# 3) Grab the source code and add it to the workspace.
ADD . /<GO>/src/<PROJECT>
ADD . /<GO>/gopkg.in
# Trying to add the files manually... Doesn't help.
ADD . /opt/local/share/doc/ImageMagick-6
# 4) Install revel and the revel CLI.
#(The commented out code is from previous attempts)
#RUN pkg-config --cflags --libs MagickWand
#RUN go get gopkg.in/gographics/imagick.v2/imagick
RUN go get github.com/revel/revel
RUN go get github.com/revel/cmd/revel
# 5) Does not work... Can't find the package.
#RUN apt-get install libmagickwand-dev
# 6) Get godeps from main repo
RUN go get github.com/tools/godep
# 7) Restore godep dependencies
WORKDIR /<GO>/src/<PROJECT>
RUN godep restore
# 8) Install Imagick
#RUN go build -tags no_pkgconfig gopkg.in/gographics/imagick.v2/imagick
# 9) Use the revel CLI to start up our application.
ENTRYPOINT revel run <PROJECT> dev 9000
# 10) Open up the port where the app is running.
EXPOSE 9000
===结束 DOCKER文件===
这允许我构建 docker 容器,但是当我尝试 运行 它时,我在运动学日志中收到以下错误:
===DOCKER 错误===
ERROR 2016/08/20 21:15:10 build.go:108: # pkg-config --cflags MagickWand MagickCore MagickWand MagickCore
pkg-config: exec: "pkg-config": executable file not found in $PATH
2016-08-20T21:15:10.081426584Z
ERROR 2016/08/20 21:15:10 build.go:308: Failed to parse build errors:
#pkg-config --cflags MagickWand MagickCore MagickWand MagickCore
pkg-config: exec: "pkg-config": executable file not found in $PATH
2016-08-20T21:15:10.082140143Z
===结束 DOCKER 错误===
大多数基本映像都删除了包列表以避免减小映像大小。因此,为了使用 apt-get
安装某些东西,您首先需要更新包列表,然后安装您想要的任何包。然后,在安装包之后,删除 运行 apt 的所有副作用以避免用不需要的文件污染图像(所有这些都必须作为单个 RUN
命令)。
以下 Dockerfile 应该可以解决问题:
FROM golang:latest
RUN apt-get update \ # update package lists
&& apt-get install -y libmagickwand-dev \ # install the package
&& apt-get clean \ # clean package cache
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # remove everything else
RUN go get gopkg.in/gographics/imagick.v2/imagick
记得将-y
添加到apt-get install
,因为docker build
是非交互式的。