linux - `cp` 对比 `rsync` 对比更快的东西

标签 linux macos docker rsync cp

我正在使用 Docker 并且 Docker 无法将符号链接(symbolic link)文件COPY 到图像中。但是符号链接(symbolic link)的文件不在“构建上下文”中。所以我打算用 cp 将它们复制到构建上下文中,但这真的很慢。有没有什么方法可以共享磁盘上两个不同位置的文件,而无需复制它们并且不使用符号链接(symbolic link)?

最佳答案

这是不允许的,也不会是

https://github.com/moby/moby/issues/1676

We do not allow this because it's not repeatable. A symlink on your machine is the not the same as my machine and the same Dockerfile would produce two different results. Also having symlinks to /etc/paasswd would cause issues because it would link the host files and not your local files.

如果你有每个容器都需要的公共(public)文件,那么我会将它们全部放在一个共享镜像中并使用 docker multi 构建选项

FROM mysharedimage as shared

FROM alpine
COPY --from=shared /my/common/stuff /common
....

这仍然不是最优雅的解决方案,但是,因为当您执行 docker build 时,当前上下文被压缩并发送到 docker 守护进程,软链接(soft link)将不起作用。

您可以创建硬链接(hard link),但硬链接(hard link)会指向 inode,并且不会向您显示它们指向的文件。其他软链接(soft link)会告诉您它们指向的位置,但构建不会发送它们。

ln /source/file /dest/file

所以你的电话真的是你想做什么以及你想怎么做。

关于linux - `cp` 对比 `rsync` 对比更快的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46135315/

相关文章:

linux - 评论 bash 脚本?

ios - 如何使用 Swift 通过 LE 蓝牙将 MIDI 数据从 iOS 发送到 OS X

mysql - rails db:migrate rails 中止! Mysql2::错误:用户 'root' @'localhost' 的访问被拒绝(使用密码:是)

c - NSAddImage 的替换(在 GLLoadGen 中)

docker - 来自 OSX 的 Ansible Docker 模块

ubuntu - Docker 守护进程标志被忽略

sockets - 有没有一种方法可以将Docker套接字从一个容器安装到另一个容器?

linux - 将查找结果附加到 txt 文件

linux - 执行 之间的区别。 script.sh 与 ./script.sh

linux - i386-pc-mingw32-objdump pe 反汇编中止