Estoy tratando de crear un contenedor a partir de la imagen del node js y configuré mi Dockerfile como se muestra:
FROM node:boron # Create app directory RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # Install app dependencies COPY package.json /usr/src/app RUN npm install # Bundle app source COPY . /usr/src/app VOLUME ./:/usr/src/app ENTRYPOINT [ "npm run watch" ] En el package.json tengo un script llamado watch que ejecuta la tarea gulp llamada watch-less .
Si ejecuto npm run watch en mi entorno local, el comando funciona, pero cuando intento ejecutar el contenedor, no funciona y muestra el siguiente error:
ventana acoplable: Respuesta de error del daemon: error de tiempo de ejecución de oci: container_linux.go:247: el proceso de inicio del contenedor causó "exec: \"npm run watch\": no se encontró el archivo ejecutable en $PATH".
ENTRYPOINT [ "npm run watch" ] Esta es una sintaxis json incorrecta, está buscando el ejecutable npm run watch , no el ejecutable npm con parámetros run and watch :
Con la sintaxis json necesitas separar cada argumento. Puede utilizar la sintaxis de shell:
ENTRYPOINT npm run watch O puede actualizar la sintaxis json como (suponiendo que npm esté instalado en /usr/bin ):
ENTRYPOINT [ "/usr/bin/npm", "run", "watch" ]También tiene una definición de volumen incorrecta:
VOLUME ./:/usr/src/appDockerfiles no puede especificar cómo se monta el volumen en el host, solo que se define un volumen anónimo en una ubicación de directorio específica. Con una sintaxis como:
VOLUME /usr/src/appTengo fuertes opiniones en contra del uso de una definición de volumen dentro del Dockerfile descrito en esta publicación de blog . En resumen, puede definir mejor el volumen en un docker-compose.yml, todo lo que puede hacer con un Dockerfile es crear volúmenes anónimos que aún necesitaría redefinir en otro lugar si desea poder reutilizarlos fácilmente más adelante.
Si usa la notación de lista para ENTRYPOINT , es decir, con los [ corchetes ] , debe separar los argumentos correctamente.
ENTRYPOINT ["npm", "run", "watch"] En este momento está tratando de encontrar un archivo llamado literalmente " npm run watch " y eso no existe.