首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在重新生成容器时,Docker复制不更新文件

在重新生成容器时,Docker复制不更新文件
EN

Stack Overflow用户
提问于 2017-01-06 03:13:31
回答 9查看 44.9K关注 0票数 47

我有一个用于定义PHP应用程序的docker-复合-staging.yml文件。我已经定义了我的应用程序代码所在的数据卷容器(app),并使用volumes_from与其他容器共享。

码头工人

代码语言:javascript
复制
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/bash

这个特定的docker-复合-staging.yml用于将应用程序部署到云提供商(DigitalOcean),而应用程序容器的Dockerfile具有复制命令,将文件夹从本地目录复制到在配置中定义的卷。

docker/staging/app/Dockerfile:

代码语言:javascript
复制
FROM php:7.1-fpm
COPY ./public /var/www/html/public
COPY ./code /var/www/html/code

这在我第一次构建和部署应用程序时起作用。在远程服务器上,我的公共和代码目录中的代码是存在的和正确的。我使用以下命令进行部署:

代码语言:javascript
复制
docker-compose -f docker-compose-staging.yml up -d

但是,接下来我尝试将一个文件添加到本地公共目录中,然后运行以下命令来重新生成更新的代码:

代码语言:javascript
复制
docker-compose -f docker-compose-staging.yml build app

此重构的输出表明复制命令成功:

代码语言:javascript
复制
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 643d8745a479

然后使用以下方法进行部署:

代码语言:javascript
复制
docker-compose -f docker-compose-staging.yml up -d

具有以下输出:

代码语言:javascript
复制
Recreating docker_app_1
Recreating docker_php_1
Recreating docker_nginx_1

但是,当我登录到远程容器时,文件更改就不存在了。

我是比较新的码头,所以我不确定我是否误解了这个过程的任何部分!如有任何指导,将不胜感激。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2017-01-06 21:16:33

您正在尝试使用新图像中的内容更新现有卷,但这不起作用。

https://docs.docker.com/engine/tutorials/dockervolumes/#/data-volumes

各国:

Changes to a data volume will not be included when you update an image.

票数 -4
EN

Stack Overflow用户

发布于 2017-01-06 04:30:24

这是因为缓存。

跑,

代码语言:javascript
复制
docker-compose build --no-cache

这将重建图像而不使用任何缓存。

然后,

代码语言:javascript
复制
docker-compose -f docker-compose-staging.yml up -d
票数 23
EN

Stack Overflow用户

发布于 2021-02-09 22:25:26

我一直在挣扎,因为移民没有被发现,也没有完成。找到这个线程并注意到根本原因实际上是容器中没有更新文件。上面建议的力重建解决方案为我解决了这个问题,但我发现要记住什么时候去做和什么时候不去做是很麻烦的。例如,与Vue相关的文件似乎工作得很好,但是Django相关的文件却不能工作。

因此,我想为什么不尝试在复制之前调整Docker文件以清除以前的文件:

代码语言:javascript
复制
RUN rm -rf path/to/your/app
COPY . path/to/your/app

很有魅力。现在,它是构建的一部分,您所需要的只是运行码头-重新编写-d -构建。文件是最新的,您可以运行make迁移并对容器进行迁移。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41498336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档