下面有一个带有Dockerfile
的码头集装箱:
FROM python:latest
WORKDIR /app
COPY ./requirements.txt .
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["uvicorn", "api.app:app", "--port", "5000", "--host", "0.0.0.0"]
st", "0.0.0.0"]
但是,当使用清单计划部署时,它运行得很好:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: premiere-api
spec:
selector:
matchLabels:
name: premiere-api
replicas: 3
template:
metadata:
labels:
name: premiere-api
spec:
containers:
- name: premiere-api
image: docker.io/piotrostr/premiere
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: premiere-secrets
key: POSTGRES_PASSWORD
optional: false
- name: POSTGRES_USERNAME
valueFrom:
secretKeyRef:
name: premiere-secrets
key: POSTGRES_USERNAME
optional: false
- name: POSTGRES_HOST
value: db
ports:
- containerPort: 5000
imagePullSecrets:
- name: regcred
restartPolicy: Always
我遇到了一个错误:
exec /usr/local/bin/uvicorn: exec format error
这使得集装箱出口。使用docker run -it piotrostr/premiere
运行容器与使用docker-compose
是一样的。
以前有人遇到过这个问题吗?在启用CGO
的情况下,有一次发生了这种情况,但是禁用它会导致exec错误消失。我试图使用--platform linux/amd64
显式地构建映像,但是上面的错误仍然存在。
解出
这个平台确实错了,解决方案是使用amd64/python
映像而不是常规的python映像。
FROM amd64/python:latest
如果使用skaffold -应该确保配置具体的平台。下面的例子。
...
build:
artifacts:
...
docker:
dockerfile: Dockerfile
platforms: ["linux/amd64"]
...
发布于 2022-06-07 16:25:00
似乎你正在为一个不同的平台(f.e。与执行环境(f.e )相比,ARM在M1 mac或raspberry pi上运行。amd64)。
确保使用正确的目标平台进行构建,或者一次构建多个映像,以便容器运行时能够为执行平台提取正确的映像。
https://stackoverflow.com/questions/72534458
复制相似问题