带通配符 (*) 的 Dockerfile 符号 link 不起作用
Dockerfile symbolic link with wildcard (*) not working
我是 docker 的新手,我在使用以下 运行 命令创建符号 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
直接在容器中创建 symlink 时我得到了正确的输出,但由于某些原因,通配符 (*) 在构建图像时不起作用。
如果我用特定文件替换通配符,symlink 会在构建时正确创建。
这是可行的,但我想避免列出文件夹中的所有文件:
FROM php:7.3-apache
RUN ["/bin/bash", "-c", "ln -s /app/frontend/web/index.php /var/www/html"]
任何人都知道如何做到这一点,我已经搜索了一段时间并尝试了 运行 命令的不同语法但没有成功。
编辑:我的后端的符号 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/
里面什么也没有,因为你还没有复制文件 - 你正试图 运行 它紧跟在 FROM
之后。首先,您需要复制您的文件,以便 glob 与您的文件匹配。否则 glob 表达式将直接传递给 ln
,创建一个名为 *
的文件,指向一个不存在的 *
文件。
FROM php:7.3-apache
COPY myfrontend/ /app/frontend/
RUN ["/bin/bash", "-c", "ln -s /app/frontend/web/* /var/www/html"]
我是 docker 的新手,我在使用以下 运行 命令创建符号 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
直接在容器中创建 symlink 时我得到了正确的输出,但由于某些原因,通配符 (*) 在构建图像时不起作用。
如果我用特定文件替换通配符,symlink 会在构建时正确创建。 这是可行的,但我想避免列出文件夹中的所有文件:
FROM php:7.3-apache
RUN ["/bin/bash", "-c", "ln -s /app/frontend/web/index.php /var/www/html"]
任何人都知道如何做到这一点,我已经搜索了一段时间并尝试了 运行 命令的不同语法但没有成功。
编辑:我的后端的符号 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/
里面什么也没有,因为你还没有复制文件 - 你正试图 运行 它紧跟在 FROM
之后。首先,您需要复制您的文件,以便 glob 与您的文件匹配。否则 glob 表达式将直接传递给 ln
,创建一个名为 *
的文件,指向一个不存在的 *
文件。
FROM php:7.3-apache
COPY myfrontend/ /app/frontend/
RUN ["/bin/bash", "-c", "ln -s /app/frontend/web/* /var/www/html"]