是否从上一阶段的go映像复制go包?

2024-09-30 20:21:11 发布

您现在位置:Python中文网/ 问答频道 /正文

在基于图像的Python中,我想使用go-package-gnostic运行一个命令(*):

RUN gnostic --grpc-out=test test/openapi/loyalty-bff.yaml

我确实写了以下dockerfile:

FROM golang:1.17 AS golang
RUN go get -u github.com/google/gnostic@latest
RUN go get -u github.com/googleapis/gnostic-grpc@latest

FROM python:3.7.10
WORKDIR /app
ADD requirements.txt /app/
RUN pip install -r requirements.txt
ADD . /app/
COPY --from=golang /go/bin/gnostic /go/bin/gnostic-grpc
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "5000"]

我在运行命令(*)时出错:

Command 'gnostic --grpc-out=loyalty-bff-1634180849463365375 loyalty-bff-1634180849463365375/loyalty-bff.yaml' returned non-zero exit status 127.

另一方面,我可以在不使用多级的情况下运行。替换为在基于图像的go中安装python,但构建时间非常长:

FROM golang:1.17
WORKDIR /app
RUN go get -u github.com/google/gnostic@latest
RUN go get -u github.com/googleapis/gnostic-grpc@latest
RUN apt-get update
RUN apt-get install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev wget libbz2-dev
RUN wget https://www.python.org/ftp/python/3.7.8/Python-3.7.8.tgz
RUN tar -xf Python-3.7.8.tgz
RUN cd Python-3.7.8 \
    && ./configure --enable-shared \
    && make && make install
RUN apt-get install python3-pip -y

ADD requirements.txt /app/
RUN pip3 install -r requirements.txt
ADD . /app/
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "5000"]

Tags: installrundevgithubcomaddappgo
1条回答
网友
1楼 · 发布于 2024-09-30 20:21:11

退出代码127通常意味着找不到可执行文件

如果查找golang:1.17的env,则默认情况下可以看到PATH具有/go/bin

$ docker run  rm -it golang:1.17 env
PATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=a9b7efb588ea
TERM=xterm
GOLANG_VERSION=1.17.2
GOPATH=/go
HOME=/root

这就是为什么在基于golang的容器中可以找到gnostic的原因

但是,在{}中,它是下一个:

$ docker run  rm -it python:3.7.10 env
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

因此,对于您的场景,将副本更改为“下一个”可以使其正常工作:

COPY  from=golang /go/bin/gnostic /go/bin/gnostic-grpc /usr/local/bin/

相关问题 更多 >