Dockerfile symboli c ссылка с подстановочным знаком (*) не работает - PullRequest
1 голос
/ 17 июня 2020

Я новичок в docker, и у меня возникла проблема с созданием символьной c ссылки с помощью следующей команды RUN:

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

Я получаю правильный результат при создании символической ссылки непосредственно в контейнер, но по какой-то причине подстановочный знак (*) не работает при построении образа.

Если я заменяю подстановочный знак конкретным файлом c, символическая ссылка создается правильно во время сборки. Это работает, но я бы не хотел перечислять все файлы из папки:

FROM php:7.3-apache

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

Кто-нибудь знает, как это сделать, я какое-то время искал и пробовал другой синтаксис эта команда RUN безуспешна.

EDIT: символическая c ссылка на мой сервер работает должным образом. Я также должен был отметить, что я использую docker -compose, и том, содержащий мое веб-приложение, монтируется в папку / app.

Спасибо

1 Ответ

1 голос
/ 17 июня 2020

Когда * не соответствует ни одному файлу, он передается вашей команде как есть:

$ 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. Сначала вам нужно скопировать свои файлы, чтобы глобус соответствовал вашим файлам. Или же глобальные выражения передаются буквально в ln, создавая файл с именем *, указывающий на несуществующий файл *.

FROM php:7.3-apache

COPY myfrontend/ /app/frontend/

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