gpt4 book ai didi

docker - 如何绕过 Docker 对符号链接(symbolic link)使用的限制?

转载 作者:行者123 更新时间:2023-12-02 19:58:24 24 4
gpt4 key购买 nike

我有多组要包含为数据的文件
用于网络服务器。其中一些集合是静态的
支持静态网站的 Assets 。

假设正好有两个网站的静态 Assets ,
作为网络服务器的数据包含在内。每组 Assets
布局在自己的文件夹中,可能在源代码中(例如 git)
存储库。这些位于:

/path/to/site1/public


/other/path/to/site2/public

实际上可能有几组这样的静态
Assets 位于不同的子目录
文件系统中不同位置的文件夹。

我需要将它们安装到 Docker 镜像中,
例如, /var/www/http/site1 , 和 /var/www/http/site2 ,
等等。

有一个绕过的好方法会非常有用
Docker 对使用符号链接(symbolic link)的限制
必须将这些数据集发布到某处的 Web 服务器上
并在 Dockerfiles 中引用它们的 URL。

最佳答案

这种模式很灵活,对我来说效果很好。
此示例中的当前目录是父目录
包含静态 Assets 的一个,它们是
在名为“public”的文件夹中。

在这个文件夹中,一个 shell 脚本是这样的:

#!/bin/bash

# Build a Docker image "site1-assets" with the static files.
docker build -f - --tag=site1-assets . <<EOF
FROM scratch
COPY public ./
EOF

对 site2 等的静态 Assets 执行类似操作。
每组文件的位置无关紧要,
只要它们都在同一台机器上。

然后在需要 Assets 的任何 Dockerfile 中,行
像这样:
FROM site1-assets as site1
COPY / /

FROM site2-assets as site2
COPY / /

# and so on.

# And now the step that uses the external files.
FROM alpine

# Some config lines here ...

# Copy in files in image "site1".
COPY from=site1 / /var/www/http/site1/
# Copy in files in image "site2".
COPY from=site2 / /var/www/http/site2/

# More config lines if needed.

CMD run-my-app args

如果外部图像很少更改,您可能希望
将文件复制到客户端开头附近
Docker 文件。如果他们经常改变,它可能是
最好把它们放在最后。这个想法是
利用 Docker 的缓存能力
用于 future 构建的部分图像。

核心思想与option基本相同
https://stackoverflow.com/a/39382248/5022006 中的“共享基本图像” ,
但比那里描述的场景更灵活。

关于docker - 如何绕过 Docker 对符号链接(symbolic link)使用的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56212176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com