从上一阶段复制 go 包基于 go 映像?

在基于图像的Python中,我想使用go包诺斯替运行一个命令(*):


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


我确实写了以下泊坞文件:


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"]


PIPIONE
浏览 105回答 1
1回答

一只斗牛犬

退出代码通常意味着找不到可执行文件。127如果你正在寻找 env 的 ,你可以默认看到 有:golang:1.17PATH/go/bin$ docker run --rm -it golang:1.17 envPATH=/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=a9b7efb588eaTERM=xtermGOLANG_VERSION=1.17.2GOPATH=/goHOME=/root这就是为什么你可以在基于戈兰的容器中找到的原因。gnostic但是,在 中,它是下一个:python:3.7.10$ docker run --rm -it python:3.7.10 envPATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin因此,对于您的方案,将副本更改为 next 可以使其正常工作:COPY --from=golang /go/bin/gnostic /go/bin/gnostic-grpc /usr/local/bin/
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go