Docker 命令 COPY 不复制更新的文件
Docker command COPY doesn't copy updated files
我的目标是使用 docker 处理一个项目,而不必在每次稍微修改一个文件时都不断地重建我的整个项目:
下面的文件(不完整)有 2 个状态,一个已经更新的版本,我将称之为
Version_0 看起来像这样:
<#modelInf> rdf:type ja:InfModel ;
# ja:content [ja:externalContent <file:/fuseki/ontologies/server_famille.ttl> ; ] ;
ja:reasoner [
ja:reasonerClass "openllet.jena.PelletReasonerFactory" ; ]
.
更新后效果很好,但后来我决定取消注释一行,这个文件我将调用 Version_1 :
<#modelInf> rdf:type ja:InfModel ;
ja:content [ja:externalContent <file:/fuseki/ontologies/server_famille.ttl> ; ] ;
ja:reasoner [
ja:reasonerClass "openllet.jena.PelletReasonerFactory" ; ]
.
我的 docker 文件的重要部分如下所示:
FROM [...]
RUN mkdir -p /fuseki
RUN mkdir -p /fuseki/configuration/
WORKDIR /fuseki
COPY server/configuration/db_tdb.ttl configuration
我还 运行 一个 docker-compose 文件 [已编辑]
version: "3"
services:
jena-fuseki-server:
hostname: jena-fuseki
build:
context: .
dockerfile: server.Dockerfile
restart: always
ports:
- 3030:3030
environment:
- ADMIN_PASSWORD=admin
- FUSEKI_DATASET_1=ds
command: cat /fuseki/configuration/db_tdb.ttl
问题好像是我第一次运行$docker-compose up --build
效果不错,复制Version_0对了,修改后,我重新 运行 $docker-compose up --build
并且我希望 Version_1 被复制的文件。发生的事情是,在通过 docker exec -it [name] bash
验证导航我的图像并执行 cat db_tdb.ttl
之后,它仍然显示 Version_0。测试我的应用程序确认 Version_0 是 运行ning.
[已编辑] 我添加的 cat
命令显示 Version_0 也是复制的
What have you tried ?
- 命令
docker-compose build --no-cache
后跟[=21=]
结果:没有工作,没有完成我想要的。
- 命令
docker system prune -a
后跟[=23=]
结果:它确实有效,但没有达到我想要的效果。
- 我还尝试以配置文件夹而不是文件本身为目标
结果:无明显变化。
- 添加一个
RUN rm -f configuration
结果:无明显变化
- [已编辑] 运行 :
docker-compose up --build --force-recreate
结果:无明显变化
Honorable mentions
- 在我的项目中,我并不总是遇到这个问题。
- 当我使用
docker-compose up --build
时,它使用缓存,但修改后的文件除外,但仍然不起作用
由于这是一个大项目,我无法决定使用 运行 docker system prune -a
或使用 --no-cache
,因为这会浪费大量时间。
我觉得它在某些时候有效,但我无法理解原因,也无法保持一致性。
谢谢。
尝试 docker-compose down
然后 docker-compose up --build
。
似乎首先删除容器修复了一些隐藏的缓存问题。
我的目标是使用 docker 处理一个项目,而不必在每次稍微修改一个文件时都不断地重建我的整个项目:
下面的文件(不完整)有 2 个状态,一个已经更新的版本,我将称之为
Version_0 看起来像这样:
<#modelInf> rdf:type ja:InfModel ;
# ja:content [ja:externalContent <file:/fuseki/ontologies/server_famille.ttl> ; ] ;
ja:reasoner [
ja:reasonerClass "openllet.jena.PelletReasonerFactory" ; ]
.
更新后效果很好,但后来我决定取消注释一行,这个文件我将调用 Version_1 :
<#modelInf> rdf:type ja:InfModel ;
ja:content [ja:externalContent <file:/fuseki/ontologies/server_famille.ttl> ; ] ;
ja:reasoner [
ja:reasonerClass "openllet.jena.PelletReasonerFactory" ; ]
.
我的 docker 文件的重要部分如下所示:
FROM [...]
RUN mkdir -p /fuseki
RUN mkdir -p /fuseki/configuration/
WORKDIR /fuseki
COPY server/configuration/db_tdb.ttl configuration
我还 运行 一个 docker-compose 文件 [已编辑]
version: "3"
services:
jena-fuseki-server:
hostname: jena-fuseki
build:
context: .
dockerfile: server.Dockerfile
restart: always
ports:
- 3030:3030
environment:
- ADMIN_PASSWORD=admin
- FUSEKI_DATASET_1=ds
command: cat /fuseki/configuration/db_tdb.ttl
问题好像是我第一次运行$docker-compose up --build
效果不错,复制Version_0对了,修改后,我重新 运行 $docker-compose up --build
并且我希望 Version_1 被复制的文件。发生的事情是,在通过 docker exec -it [name] bash
验证导航我的图像并执行 cat db_tdb.ttl
之后,它仍然显示 Version_0。测试我的应用程序确认 Version_0 是 运行ning.
[已编辑] 我添加的 cat
命令显示 Version_0 也是复制的
What have you tried ?
- 命令
docker-compose build --no-cache
后跟[=21=]
结果:没有工作,没有完成我想要的。 - 命令
docker system prune -a
后跟[=23=]
结果:它确实有效,但没有达到我想要的效果。 - 我还尝试以配置文件夹而不是文件本身为目标
结果:无明显变化。 - 添加一个
RUN rm -f configuration
结果:无明显变化 - [已编辑] 运行 :
docker-compose up --build --force-recreate
结果:无明显变化
Honorable mentions
- 在我的项目中,我并不总是遇到这个问题。
- 当我使用
docker-compose up --build
时,它使用缓存,但修改后的文件除外,但仍然不起作用
由于这是一个大项目,我无法决定使用 运行 docker system prune -a
或使用 --no-cache
,因为这会浪费大量时间。
我觉得它在某些时候有效,但我无法理解原因,也无法保持一致性。
谢谢。
尝试 docker-compose down
然后 docker-compose up --build
。
似乎首先删除容器修复了一些隐藏的缓存问题。