Soy nuevo en Docker. Creé una aplicación con VueJs2 que interactúa con una API externa. Me gustaría ejecutar la aplicación en docker.
Aquí está mi archivo docker-compose.yml
version: '3' services: ew_cp: image: vuejs_img container_name: ew_cp build: context: . dockerfile: Dockerfile volumes: - '.:/app' - '/app/node_modules' ports: - '8080:8080'Aquí está mi Dockerfile:
FROM node:14.17.0-alpine as develop-stage WORKDIR /app COPY package*.json ./ RUN npm install RUN yarn install COPY . . EXPOSE 8080 CMD ["node"]Aquí está el comando de construcción que ejecuto para construir mi imagen en un contenedor.
docker-compose up -dLa imagen y el contenedor se construyen sin errores, pero cuando ejecuto el contenedor, se detiene de inmediato. Entonces el contenedor no se está ejecutando. ¿Están configurados correctamente los archivos DockerFile y Compone?
En primer lugar, ejecuta npm install e yarn install , que hacen lo mismo, solo que usan diferentes administradores de paquetes. En segundo lugar, está utilizando CMD ["node"] que no inicia su aplicación vue, por lo que no se está ejecutando ningún trabajo y Docker se está cerrando.
Para la aplicación vue, normalmente desea crear la aplicación con activos estáticos y luego ejecutar un servidor http simple para servir el contenido estático.
FROM node:lts-alpine # install simple http server for serving static content RUN npm install -g http-server # make the 'app' folder the current working directory WORKDIR /app # copy 'package.json' to install dependencies COPY package*.json ./ # install dependencies RUN npm install # copy files and folders to the current working directory (ie 'app' folder) COPY . . # build app for production with minification RUN npm run build EXPOSE 8080 CMD [ "http-server", "dist" ] Su archivo docker-compose podría ser tan simple como
version: "3.7" services: vue-app: build: context: . dockerfile: Dockerfile container_name: vue-app restart: always ports: - "8080:8080" networks: - vue-network networks: vue-network: driver: bridge para ejecutar el servicio desde docker-compose use la propiedad de command en su docker-compose.yml .
services: vue-app: command: > sh -c "yarn serve"No estoy seguro del problema, pero al usar command: tail -f /dev/null en su archivo docker-compose , mantendrá su contenedor para que pueda rastrear el error dentro de él y encontrar su problema. Puede hacerlo ejecutando docker exec -it <CONTAINER-NAME> bash y rastreando los registros de errores en su contenedor.
version: '3' services: ew_cp: image: vuejs_img container_name: ew_cp build: context: . dockerfile: Dockerfile volumes: - '.:/app' - '/app/node_modules' command: tail -f /dev/null ports: - '8080:8080' En su Dockerfile , debe iniciar su aplicación, por ejemplo, npm run start o cualquier otro script que esté utilizando para ejecutar su aplicación en su package.json .