我正在尝试在Alpine Docker映像中安装Go。为此,我从高山docker映像中的here下载了tar文件,请使用以下命令将其解压缩:
tar -C / usr / local -xzf go1.10.3.linux-amd64.tar.gz
导出的PATH具有二进制格式:
export PATH = $ PATH:/ usr / local / go / bin
但是,当我说go version
时,它说的是sh: go: not found
。我是高山新手。有人知道吗,我在这里想念什么?
复制步骤-
$ docker run -it alpine sh
$ wget https://dl.google.com/go/go1.10.3.linux-amd64.tar.gz
$ tar -C /usr/local -xzf go1.10.3.linux-amd64.tar.gz
$ export PATH=$PATH:/usr/local/go/bin
$ go version
答案 0 :(得分:8)
对于Alpine,您拥有libmusl而不是glibc。高山的libmusl不是一对一替换。针对glibc链接的代码将显示未找到的错误,该错误实际上来自动态链接器。您可以看到哪些库使用ldd链接到二进制文件:
/ # ldd /usr/local/go/bin/go
/lib64/ld-linux-x86-64.so.2 (0x7f63ceed1000)
libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f63ceed1000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f63ceed1000)
有两个选项。首选选项(在Alpine上由docker's go镜像使用)是在Alpine上编译go二进制文件。您可以在Dockerfile中看到golang图像:https://github.com/docker-library/golang/blob/69f2d2a132565bf60afc91813801a3bdcc981526/1.10/alpine3.8/Dockerfile
另一种选择是在Alpine上安装glibc,但是一旦您开始做这样的事情,我会问为什么要完全使用Alpine,以及Debian或CentOS对您来说是更合适的基础映像。高山有wiki topic on this,有third parties that have created glibc packages for alpine。
答案 1 :(得分:7)
感谢BMitch。
我编译了go源代码,并在高山图像容器中执行了以下步骤。
echo "installing go version 1.10.3..."
apk add --no-cache --virtual .build-deps bash gcc musl-dev openssl go
wget -O go.tgz https://dl.google.com/go/go1.10.3.src.tar.gz
tar -C /usr/local -xzf go.tgz
cd /usr/local/go/src/
./make.bash
export PATH="/usr/local/go/bin:$PATH"
export GOPATH=/opt/go/
export PATH=$PATH:$GOPATH/bin
apk del .build-deps
go version
答案 2 :(得分:3)
我发现让golang
在高山linux上运行的最佳方法是从源代码安装它。官方高山go docker镜像中也遵循这种方式。
FROM alpine:3.12
ARG GOLANG_VERSION=1.14.3
#we need the go version installed from apk to bootstrap the custom version built from source
RUN apk update && apk add go gcc bash musl-dev openssl-dev ca-certificates && update-ca-certificates
RUN wget https://dl.google.com/go/go$GOLANG_VERSION.src.tar.gz && tar -C /usr/local -xzf go$GOLANG_VERSION.src.tar.gz
RUN cd /usr/local/go/src && ./make.bash
ENV PATH=$PATH:/usr/local/go/bin
RUN rm go$GOLANG_VERSION.src.tar.gz
#we delete the apk installed version to avoid conflict
RUN apk del go
RUN go version
答案 3 :(得分:1)
以下Dockerfile对我有用。更简单,更抽象。
FROM python:3.6
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY . /app
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Define environment variable
ENV NAME Netflow
# Run netflow.py
CMD ["python", "netflow.py"]
答案 4 :(得分:0)
如果基本要求是在基于高山的docker映像中安装特定的go版本,则请参阅golang dockerhub官方帐户上可用的images。
docker pull golang:1.12-alpine
docker pull golang:1.11-alpine
答案 5 :(得分:0)
我只是使用多阶段构建复制了它,到目前为止似乎还可以
FROM golang:1.13-alpine AS go
从XXX
COPY --from = go / usr / local / go / / usr / local / go /
RUN export PATH =“ / usr / local / go / bin:$ PATH” && go版本
答案 6 :(得分:0)
有 Alpine 包,带有最新版本的 golang:
pkg --update 添加去