Tengo un archivo docker-compose-staging.yml que estoy usando para definir una aplicación PHP. He definido un contenedor de volumen de datos (aplicación) en el que reside el código de mi aplicación y se comparte con otros contenedores mediante volumes_from.
ventana acoplable-componer-puesta en escena.yml:
version: '2' services: nginx: build: context: ./ dockerfile: docker/staging/nginx/Dockerfile ports: - 80:80 links: - php volumes_from: - app php: build: context: ./ dockerfile: docker/staging/php/Dockerfile expose: - 9000 volumes_from: - app app: build: context: ./ dockerfile: docker/staging/app/Dockerfile volumes: - /var/www/html entrypoint: /bin/bashEste docker-compose-staging.yml en particular se usa para implementar la aplicación en un proveedor de nube (DigitalOcean), y el Dockerfile para el contenedor de la aplicación tiene comandos COPY que copian carpetas desde el directorio local al volumen definido en la configuración.
ventana acoplable/puesta en escena/aplicación/Dockerfile:
FROM php:7.1-fpm COPY ./public /var/www/html/public COPY ./code /var/www/html/codeEsto funciona cuando compilo e implemento la aplicación por primera vez. El código en mis directorios público y de código está presente y es correcto en el servidor remoto. Despliego usando el siguiente comando:
docker-compose -f docker-compose-staging.yml up -dSin embargo, luego intento agregar un archivo a mi directorio público local, luego ejecuto el siguiente comando para reconstruir el código actualizado:
docker-compose -f docker-compose-staging.yml build appEl resultado de esta reconstrucción sugiere que los comandos COPY fueron exitosos:
Building app Step 1 : FROM php:7.1-fpm ---> 6ed35665f88f Step 2 : COPY ./public /var/www/html/public ---> 4df40d48e6a5 Removing intermediate container 7c0fbbb7f8b6 Step 3 : COPY ./code /var/www/html/code ---> 643d8745a479 Removing intermediate container cfb4f1a4f208 Successfully built 643d8745a479Luego implemento usando:
docker-compose -f docker-compose-staging.yml up -dCon la siguiente salida:
Recreating docker_app_1 Recreating docker_php_1 Recreating docker_nginx_1Sin embargo, cuando inicio sesión en los contenedores remotos, los cambios de archivo no están presentes.
Soy relativamente nuevo en Docker, así que no estoy seguro de haber entendido mal alguna parte de este proceso. Cualquier orientación sería apreciada.
Esto se debe a la memoria caché.
Correr,
docker-compose build --no-cacheEsto reconstruirá las imágenes sin usar ningún caché.
Y luego,
docker-compose -f docker-compose-staging.yml up -dEstaba luchando con el hecho de que las migraciones no se detectaron ni se realizaron. Encontré este hilo y noté que la causa principal era, de hecho, que los archivos no se actualizaban en el contenedor. La solución de recreación forzada sugerida anteriormente resolvió el problema para mí, pero me resulta engorroso tener que tratar de recordar cuándo hacerlo y cuándo no. Por ejemplo, los archivos relacionados con Vue parecen funcionar bien, pero los archivos relacionados con Django no.
Así que pensé por qué no intentar ajustar el archivo Docker para limpiar los archivos anteriores antes de la copia:
RUN rm -rf path/to/your/app COPY . path/to/your/appTrabajado como un encanto. Ahora es parte de la compilación y todo lo que necesita es ejecutar docker-compose up -d --build nuevamente. Los archivos están actualizados y puede ejecutar realizar migraciones y migrar contra sus contenedores.
Tuve un problema similar, si no el mismo, mientras trabajaba en la aplicación dotnet core.
Lo que intentaba hacer era reconstruir mi aplicación y hacer que actualizara la imagen de mi ventana acoplable para poder ver mis cambios reflejados en la copia en contenedor.
Así que comencé eliminando la imagen subyacente generada por docker-compose up usando el comando para reflejar mis cambios:
docker rmi *[imageId]*Creo que debería haber soporte para esto en docker-compose pero esto fue suficiente para mi necesidad en este momento.