FROM node:14.16.0-alpine3.13 RUN addgroup app && adduser -S -G app app USER app WORKDIR /app ENV PATH /app/node_modules/.bin:$PATH COPY package*.json ./ RUN npm install COPY . . ENV APP_URL=http://api.myapp.com EXPOSE 3000 CMD ["npm", "start"] Este es mi archivo docker. Estoy tratando de dockerizar una aplicación de reacción de muestra. Agregué un usuario en el grupo y luego usé ese usuario para más comandos, como puede ver en la segunda línea de este código. Creo que, de forma predeterminada, solo el usuario raíz tiene acceso para escribir en estos archivos y, para realizar cambios en estos archivos, el usuario raíz no debe ser usuario. Por lo tanto, creé el usuario de la app aquí.
Pero después de ejecutar docker build -t react-app. . Estoy teniendo el siguiente error -
¿Qué estoy haciendo mal aquí? ¿Alguna sugerencia?
Está viendo este error porque el directorio /app pertenece al usuario raíz. La app usuario que creó no tiene permiso de escritura en este directorio. La app de usuario necesita permiso de escritura para instalar paquetes de nodos (cree el directorio node_modules y el archivo package-lock.json ).
Como sugirió @DavidMaze en los comentarios , sería fácil hacer la instalación del paquete como usuario root y cambiar a la USER app en el último pero antes del tiempo de ejecución CMD ["npm", "start"] .
Pero aún así, el usuario de la app necesitaría permiso de escritura en el directorio node_modules/.cache al ejecutar la aplicación con el comando de npm start . Por lo tanto, debemos proporcionar el permiso de escritura a la app de usuario para este directorio.
Aquí hay un ejemplo que hace todo lo mencionado anteriormente:
FROM node:14.16.0-alpine3.13 WORKDIR /app ENV PATH /app/node_modules/.bin:$PATH COPY package*.json ./ RUN npm install COPY . . ENV APP_URL=http://api.myapp.com EXPOSE 3000 RUN addgroup app && adduser -S -G app app RUN mkdir node_modules/.cache RUN chown app:app node_modules/.cache USER app CMD ["npm", "start"] Además, tenga en cuenta que está ejecutando la aplicación React en modo de desarrollo usando npm start , es posible que desee usar un servidor estático para servir, después de crear una compilación.
cuando crea un usuario con el nombre "aplicación", se crea un nuevo directorio para este usuario en el directorio de inicio "/home/app", por lo que el directorio de trabajo debería ser así:
WORKDIR /home/app