+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > 从上一阶段基于 go 镜像复制 go 包? >

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

时间:2024-04-17 11:08:49

在基于图像的 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-1634180849463365375loyalty-bff-1634180849463365375/loyalty-bff.yaml' 返回非零退出状态 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"]

正确答案

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

如果您查看 golang:1.17 的环境,您可以看到默认情况下 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 的原因。

但是,在 python:3.7.10 中,接下来是:

$ 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/
以上就是本文的全部内容了.

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title