Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker sh:curl:未找到,甚至在k8s吊舱内安装curl_Docker_Kubernetes_Dockerfile - Fatal编程技术网

Docker sh:curl:未找到,甚至在k8s吊舱内安装curl

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

这个问题可能很简单,但我找不到合适的解决办法

我有一个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-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" ]