Pasos para reproducir :
COPIAR:
gg7<strong i="8">@gg7</strong>:~$ mkdir docker-mtime-test
gg7<strong i="9">@gg7</strong>:~$ cd docker-mtime-test
gg7<strong i="10">@gg7</strong>:~/docker-mtime-test$ touch example-file
gg7<strong i="11">@gg7</strong>:~/docker-mtime-test$ stat example-file
File: ‘example-file’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 7602338 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1001/ gg7) Gid: ( 1001/ gg7)
Access: 2015-10-19 14:13:28.441785563 +0100
Modify: 2015-10-19 14:13:28.441785563 +0100
Change: 2015-10-19 14:13:28.441785563 +0100
Birth: -
gg7<strong i="12">@gg7</strong>:~/docker-mtime-test$ cat > Dockerfile <<EOF
FROM ubuntu:14.04
COPY example-file /example-file
RUN stat /example-file
EOF
gg7<strong i="13">@gg7</strong>:~/docker-mtime-test$ docker build --no-cache -t docker-mtime-test .
Sending build context to Docker daemon 2.56 kB
Step 0 : FROM ubuntu:14.04
---> fa81ed084842
Step 1 : COPY example-file /example-file
---> 8212ccaf4c14
Removing intermediate container cece2b393603
Step 2 : RUN stat /example-file
---> Running in 86bd29f2fa49
File: '/example-file'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 6ch/108d Inode: 43 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-10-19 13:15:27.415707557 +0000
Modify: 2015-10-19 13:13:28.000000000 +0000
Change: 2015-10-19 13:15:27.415707557 +0000
Birth: -
---> cb0e1fdb58bd
Removing intermediate container 86bd29f2fa49
Successfully built cb0e1fdb58bd
Resultados reales : se informa que el tiempo de modificación de /example-file
es 2015-10-19 13:13:28.000000000 +0000
.
Resultados esperados : el tiempo de modificación de /example-file
debe ser 2015-10-19 13:13:28.441785563 +0000
.
docker-commit
:
gg7<strong i="26">@gg7</strong>:~$ docker run -it --name mtime-test ubuntu:14.04 /bin/bash
root<strong i="27">@613e6c0fe6ac</strong>:/# touch /example-file
root<strong i="28">@613e6c0fe6ac</strong>:/# stat /example-file
File: '/example-file'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 66h/102d Inode: 72 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-10-19 13:36:29.888088708 +0000
Modify: 2015-10-19 13:36:29.888088708 +0000
Change: 2015-10-19 13:36:29.888088708 +0000
Birth: -
root<strong i="29">@613e6c0fe6ac</strong>:/# exit
exit
gg7<strong i="30">@gg7</strong>:~$ docker commit mtime-test mtime-test-image
b67d16fcb577fb3ece29cf007f1cef2ebc4a6351bc3e3a3e77eab5648461095c
gg7<strong i="31">@gg7</strong>:~$ docker run -it --name mtime-test-2 mtime-test-image /bin/bash
root<strong i="32">@1a5e038e6a2c</strong>:/# stat /example-file
File: '/example-file'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 66h/102d Inode: 75 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2015-10-19 13:36:55.572503813 +0000
Modify: 2015-10-19 13:36:29.000000000 +0000
Change: 2015-10-19 13:36:55.572503813 +0000
Birth: -
root<strong i="33">@1a5e038e6a2c</strong>:/#
¿Porque es esto importante?
Algunos sistemas de compilación se basan en marcas de tiempo de modificación para detectar actualizaciones de archivos.
Detalles del entorno :
cat /etc/lsb-release
:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"
uname -a
:
Linux gg7 3.13.0-51-generic #84-Ubuntu SMP Wed Apr 15 12:08:34 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
docker version
:
Client:
Version: 1.8.3
API version: 1.20
Go version: go1.4.2
Git commit: f4bf5c7
Built: Mon Oct 12 05:37:18 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.8.3
API version: 1.20
Go version: go1.4.2
Git commit: f4bf5c7
Built: Mon Oct 12 05:37:18 UTC 2015
OS/Arch: linux/amd64
docker info
:
Containers: 8
Images: 632
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 656
Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-51-generic
Operating System: Ubuntu 14.04.3 LTS
CPUs: 8
Total Memory: 15.66 GiB
Name: gg7
ID: ACSH:EYI5:G36O:2SRA:FWLH:U4GF:VMJM:C4KF:73MH:L273:TCCO:GW3K
WARNING: No swap limit support
Me encontré con esto hoy.
La única solución posible es tarar archivos, copiarlos y extraerlos de nuevo ...
ACTUALIZAR las operaciones de alquitrán adicionales hicieron que las cosas fueran más lentas en general.
Dado que este problema ha estado abierto durante tanto tiempo, supongo que puede ser difícil de solucionar en Docker. Tengo curiosidad por saber por qué sería difícil conservar la marca de tiempo durante COPY
?
Este error hace que sea básicamente imposible seleccionar solo las partes que necesita de una etapa existente usando "COPY --from" - porque cada vez que lo hace, se estropea algo en el subconjunto.
Dado que, por lo general, si compones cosas NO quieres tener herramientas como tar y co disponibles (excepto cuando eres el autor de tar, supongo), la solución de tar también es un truco.
Además, digamos que usa algo más para conservar o arreglar la marca de tiempo dentro de la imagen de la ventana acoplable, ahora su imagen de la ventana acoplable tiene el doble de tamaño.
Por lo tanto, la función de conservar las marcas de tiempo es necesaria.
Comentario más útil
Me encontré con esto hoy.
La única solución posible es tarar archivos, copiarlos y extraerlos de nuevo ...
ACTUALIZAR las operaciones de alquitrán adicionales hicieron que las cosas fueran más lentas en general.