Puede ser una pregunta simple, pero no pude encontrar la solución adecuada.
Tengo una imagen de Docker como se muestra a continuación. Las cosas que me gustaría hacer simplemente ejecutan el comando curl dentro del pod de kubernetes, pero recibí un error como el que se muestra a continuación. No pude ejecutar a través de bash también.
$ 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 foundProbé con 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": unknownDockerfile
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" ]Su Dockerfile consta de varias etapas, lo que también se denomina compilación de varias etapas.
Cada instrucción FROM es una nueva etapa y una nueva imagen. En tu caso tienes 2 etapas:
builder donde construyes tu aplicación e instalas curlsecond stage que copia /usr/src/app de la etapa del builder En este caso, la segunda declaración FROM node:12-alpine contendrá solo paquetes alpine básicos, herramientas de nodo y /usr/src/app que ha copiado desde la primera etapa.
Si desea tener curl en su imagen final, debe instalar curl en la segunda etapa (después del segundo FROM node:12-alpine ):
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" ]Como se mencionó en los comentarios, puede probarlo ejecutando el contenedor docker directamente; no es necesario ejecutar pod en el clúster k8s:
docker build -t image . && docker run -it image sh -c 'which curl'Es común usar una compilación de varias etapas para aplicaciones implementadas en lenguajes de programación compilados.