gpt4 book ai didi

c - Docker 不遵循构建目录中的符号链接(symbolic link)

转载 作者:行者123 更新时间:2023-12-05 01:29:11 24 4
gpt4 key购买 nike

我正在对一个应用程序进行 Dockerizing,该应用程序涉及通过 Clang 将二进制文件与其他 C 文件链接起来。我们维护二进制文件的符号链接(symbolic link)版本,因为它们在整个代码库中使用。我的 Docker 构建目录包含整个代码库(包括源文件以及指向这些源文件的符号链接(symbolic link)),当我执行 cat [symlinked_file] 之类的操作时,Docker 会识别这些文件。 (即文件是 cat 正确编辑)。但是,当我在 Makefile 中运行 Clang 命令时,它无法链接符号链接(symbolic link)文件(这些在 Docker 中无法正常工作)。然后我将原件复制到符号链接(symbolic link)所在的目录中,替换符号链接(symbolic link),并且 Docker 在构建时没有抛出任何错误。

有谁知道如何解决这个问题?我需要在这里向 Docker 或 Clang 提供任何特殊命令吗?我不确定为什么 Clang 在 Docker 容器内的行为与在其外的行为不同。我从 Ubuntu 16.04 基础镜像运行以供引用。

最佳答案

Docker 将使用符号链接(symbolic link)(至少在我的 linux 主机上构建时),但它复制的是符号链接(symbolic link)本身,而无需遵循链接。因此,您还需要符号链接(symbolic link) 目标单独包含在构建上下文中并复制到镜像中。此上下文被发送到 docker 引擎,并且构建发生在容器内的该服务器上,因此任何指向该上下文之外文件的链接都不会解析。您还希望这些链接是相对的,或者链接的绝对路径必须指向图像内的相同绝对路径。这是一个带有相对链接的示例,显示了上下文内部和外部文件之间的差异:

$ ls -al
total 8
drwxr-xr-x 2 bmitch bmitch 4096 Mar 2 21:08 .
drwxr-xr-x 13 bmitch bmitch 4096 Mar 2 21:07 ..
lrwxrwxrwx 1 bmitch bmitch 11 Mar 2 21:08 outside.txt -> ../test.out
lrwxrwxrwx 1 bmitch bmitch 10 Mar 2 21:08 source.txt -> target.txt
-rw-r--r-- 1 bmitch bmitch 0 Mar 2 21:08 target.txt

$ cat Dockerfile
FROM busybox
COPY . /build-context
WORKDIR /build-context
CMD find .

$ docker build -t test-symlink .
Sending build context to Docker daemon 3.584 kB
Step 1/4 : FROM busybox
---> 7968321274dc
Step 2/4 : COPY . /build-context
---> 8238dac16669
Removing intermediate container dd653dfdf7a4
Step 3/4 : WORKDIR /build-context
---> c1850cb52f0e
Removing intermediate container 7ee87e20d525
Step 4/4 : CMD find .
---> Running in e710e965d98c
---> fd57eb8f426b
Removing intermediate container e710e965d98c
Successfully built fd57eb8f426b

$ docker run test-symlink
.
./outside.txt
./Dockerfile
./source.txt
./target.txt

$ docker run -it --rm test-symlink /bin/sh
/build-context # ls -al
total 12
drwxr-xr-x 2 root root 4096 Mar 3 02:09 .
drwxr-xr-x 20 root root 4096 Mar 3 02:09 ..
-rw-r--r-- 1 root root 69 Mar 3 02:08 Dockerfile
lrwxrwxrwx 1 root root 11 Mar 3 02:08 outside.txt -> ../test.out
lrwxrwxrwx 1 root root 10 Mar 3 02:08 source.txt -> target.txt
-rw-r--r-- 1 root root 0 Mar 3 02:08 target.txt
/build-context # cat outside.txt
cat: can't open 'outside.txt': No such file or directory
/build-context # cat target.txt
/build-context # exit

关于c - Docker 不遵循构建目录中的符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42569303/

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