带通配符 (*) 的 Dockerfile 符号链接(symbolic link)不起作用

标签 docker docker-compose dockerfile wildcard ln

我是 docker 新手,在使用以下 RUN 命令创建符号链接(symbolic link)时遇到问题:

FROM php:7.3-apache

RUN ["/bin/bash", "-c", "ln -s /app/frontend/web/* /var/www/html"] && \
    ln -s /app/backend/web /var/www/html/admin

这是在容器内执行“ls -la/var/www/html”时的输出:

'*' -> '/app/frontend/web/*'
admin -> /app/backend/web

我期待以下输出:

css -> /app/frontend/web/css
index.php -> /app/frontend/web/index.php
admin -> /app/backend/web

直接在容器中创建符号链接(symbolic link)时,我得到了正确的输出,但由于某种原因,通配符 (*) 在构建图像时不起作用。

如果我用特定文件替换通配符,则符号链接(symbolic link)将在构建时正确创建。 这是有效的,但我想避免列出文件夹中的每个文件:

FROM php:7.3-apache

RUN ["/bin/bash", "-c", "ln -s /app/frontend/web/index.php /var/www/html"]

任何人都知道如何做到这一点,我已经搜索了一段时间并尝试了该 RUN 命令的不同语法,但没有成功。

编辑:到我的后端的符号链接(symbolic link)按预期工作。我还应该注意到我正在使用 docker-compose 并且包含我的 webapp 的卷已安装到/app 文件夹。

谢谢

最佳答案

* 与任何文件都不匹配时,它将按原样传递给您的命令:

$ ls -l
total 0
-rw-r--r-- 1 leodag leodag 0 jun 17 03:29 a
-rw-r--r-- 1 leodag leodag 0 jun 17 03:29 b
-rw-r--r-- 1 leodag leodag 0 jun 17 03:29 c

$ ls d*
ls: cannot access 'd*': No such file or directory

所以你的问题是 /app/frontend/web/ 里面没有任何东西,因为你还没有复制文件 - 你试图在 之后运行它来自。首先,您需要复制文件,以便 glob 与您的文件匹配。否则,glob 表达式会按字面意思传递给 ln,创建一个名为 * 的文件,指向不存在的 * 文件。

FROM php:7.3-apache

COPY myfrontend/ /app/frontend/

RUN ["/bin/bash", "-c", "ln -s /app/frontend/web/* /var/www/html"]

关于带通配符 (*) 的 Dockerfile 符号链接(symbolic link)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62420974/

相关文章:

带有 docker-compose 的 Django 应用程序将数据保存在媒体卷中

Docker Desktop for Windows Dashboard 运行,但 Docker 本身不运行

docker - VScode 远程容器 - 如何查看 dockerised 服务控制台输出?

macos - docker 附上: Why can't I detach from my Docker container?

python - Docker镜像需要很长时间才能构建

python - 无法在 Docker 镜像中安装 Python 数学库

linux - 使用 Dockerfile ENTRYPOINT 找不到 exec

docker - 从特权 Docker 容器访问主机 iptables 和 ufw

docker - Docker与Apache组合和卷

Dockerfile - 找不到满足 serverlessrepo==0.1.5 要求的版本