Estoy creando una aplicación Django/React usando docker-compose, y me gustaría que vuelva a cargar mis aplicaciones cuando se realice un cambio, hasta ahora he intentado agregar CHOKIDAR_USEPOLLING , agregar npm-watch a mi paquete.json, pero no parece ser capaz de detectar cambios en el archivo host.
Idealmente, no quiero tener que ejecutar docker-compose up --build cada vez que hago un cambio, ya que hace que el desarrollo sea tedioso.
editar: debo mencionar que las aplicaciones se recargan y se ejecutan fuera de la ventana acoplable (npm start (cra default) y python manage.py runserver) como se esperaba.
Los cambios se detectan dentro del contenedor, pero la aplicación de reacción no se reconstruirá.
Estoy usando Windows 10 también.
¿Hay algún problema con mis archivos o algo más que debería estar haciendo aquí?
docker-compose.yml
version: "3.9" services: db: container_name: db image: postgres volumes: - ./data/db:/var/lib/postgresql/data environment: - POSTGRES_DB=postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres backend: container_name: backend build: ./backend command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/core ports: - "8000:8000" depends_on: - db frontend: container_name: frontend build: ./frontend command: npm start volumes: - './frontend:/app/' - '/frontend/node_modules' ports: - "3000:3000" environment: - CHOKIDAR_USEPOLLING=true depends_on: - backend # Enable interactive terminal (crucial for react container to work) stdin_open: true tty: trueDockerfile back-end
FROM python:3 ENV PYTHONUNBUFFERED=1 WORKDIR /code/ COPY requirements.txt /code/ RUN pip install -r requirements.txt COPY . /code/Dockerfile de interfaz
FROM node:16 WORKDIR /app/ COPY package*.json /app/ RUN npm install COPY . /app/ EXPOSE 3000 CMD ["npm", "start"]En lugar de copiar, debe montar los volúmenes directamente en la carpeta donde ejecuta el código en su imagen acoplable. De esa manera, los cambios de su código se reflejarán en su aplicación.
Ejemplo en docker-compose.yml:
volumes: - "local_source_destination:/server_source_destination"En su interfaz docker-compose-yml tiene:
volumes: - '.:/frontend/app'pero en tu Dockerfile tienes
COPY . /app/Entonces parece que estás confundiendo dónde montar tu volumen. Asegurarse '.' es donde está la raíz de su carpeta de código o cámbiela en consecuencia.
Prueba algo como:
volumes: - '.:/app'Como esa parece ser la ubicación que su servidor quiere que sea su código.
Si su código está correctamente montado en el destino correcto, es posible que no esté ejecutando su secuencia de comandos de vigilancia desde el interior del contenedor acoplable. Intenta ejecutar:
docker exec -itw source_destination_in_container your_container_name command_to_run_watch