Docker sh:curl:未找到,甚至在k8s吊舱内安装curl
这个问题可能很简单,但我找不到合适的解决办法 我有一个Docker的图片如下。。我想做的事情只是在kubernetes吊舱内运行curl命令,但我收到一个错误,如下所示。。我也无法通过bash执行Docker sh:curl:未找到,甚至在k8s吊舱内安装curl,docker,kubernetes,dockerfile,Docker,Kubernetes,Dockerfile,这个问题可能很简单,但我找不到合适的解决办法 我有一个Docker的图片如下。。我想做的事情只是在kubernetes吊舱内运行curl命令,但我收到一个错误,如下所示。。我也无法通过bash执行 $ kubectl exec -ti hub-cronjob-dev-597cc575f-6lfdc -n hub-dev sh Defaulting container name to hub-cronjob. Use 'kubectl describe pod/hub-cronjob-dev-59
$ kubectl exec -ti hub-cronjob-dev-597cc575f-6lfdc -n hub-dev sh
Defaulting container name to hub-cronjob.
Use 'kubectl describe pod/hub-cronjob-dev-597cc575f-6lfdc -n hub-dev' to see all of the containers in this pod.
/usr/src/app $ curl
sh: curl: not found
用bash测试
$ kubectl exec -ti cronjob-dev-597cc575f-6lfdc -n hub-dev bash
mand in container: failed to exec in container: failed to start exec "8019bd0d92aef2b09923de78753eeb0c8b60a78619543e4cd27069128a30da92": OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"bash\": executable file not found in $PATH": unknown
Dockerfile
FROM node:12-alpine AS builder
# Variables from outside
ARG NODE_ENVIRONMENT=development
ENV NODE_ENV=$NODE_ENVIRONMENT
# Create app directory
WORKDIR /usr/src/app
#Install curl
RUN apk --no-cache add curl -> did not work
RUN apk update && apk add curl curl-dev bash -> did not work
# Install app dependencies
COPY package*.json ./
RUN npm install
# Bundle app source
COPY . .
# Build Stage 2
# Take the build from the previous stage
FROM node:12-alpine
WORKDIR /usr/src/app
COPY --from=builder /usr/src/app /usr/src/app
# run the application
EXPOSE 50005 9183
CMD [ "npm", "run", "start:docker" ]
Dockerfile由多个阶段组成,也称为 来自的每个
语句都是一个新的阶段和新的图像。在您的案例中,您有两个阶段:
builder
在其中构建应用程序并安装curl
second stage
从builder
stage复制/usr/src/app
在这种情况下,node:12 alpine
语句中的第二个语句将只包含从第一阶段复制的基本alpine包、节点工具和/usr/src/app
如果要在最终映像中使用curl,则需要在第二阶段安装curl
(第二阶段之后,从节点:12开始):
正如评论中提到的,您可以通过直接运行docker容器来测试它-无需在k8s集群中运行pod:
docker build-t image.&docker run-it图像sh-c“哪个卷曲”
对于用编译编程语言实现的应用程序,通常使用多阶段构建
在第一阶段中,安装所有必要的开发工具和编译器,然后将源代码编译成二进制文件。由于您不需要,也可能不希望在生产映像中使用源代码和开发人员工具,所以您应该创建一个新阶段
在第二阶段中,复制编译的二进制文件,并将其作为CMD或ENTRYPOINT运行。这样,您的图像只包含可执行代码,这使它们更小
您必须自己在映像中安装curl,例如:运行apk--no cache add curl
您可以在本地尝试映像,在映像运行之前没有理由将其部署到kubernetes。最终映像中只包含来自
行的最后一行的内容。
FROM node:12-alpine AS builder
# Variables from outside
ARG NODE_ENVIRONMENT=development
ENV NODE_ENV=$NODE_ENVIRONMENT
# Create app directory
WORKDIR /usr/src/app
# Do not install
# Install app dependencies
COPY package*.json ./
RUN npm install
# Bundle app source
COPY . .
# Build Stage 2
# Take the build from the previous stage
FROM node:12-alpine
#Install curl
RUN apk update && apk add curl
WORKDIR /usr/src/app
COPY --from=builder /usr/src/app /usr/src/app
# run the application
EXPOSE 50005 9183
CMD [ "npm", "run", "start:docker" ]