символическая ссылка не создается внутри контейнера Docker

Вопрос или проблема

К сожалению, я не могу создать эту символическую ссылку (&& ln -s /db /var/www/html/blast/db/) внутри контейнера Docker. Что я пропустил?

FROM ubuntu:16.04

# Автор файла / Обслуживающий
MAINTAINER Рафаэль Эрнандес <https://github.com/fikipollo>

################## НАЧАЛО УСТАНОВКИ ######################
#Добавить ссылку на внутренний сервис MRS
RUN apt-get update \
    && apt-get -y install build-essential ruby ruby-dev ncbi-blast+ nginx php-fpm apache2-utils sudo wget csh fcgiwrap \
    && apt-get clean \
    && gem install sequenceserver \
    && gem install ncbi-blast-dbs

ENV ADMIN_USER=admin \
    ADMIN_PASS=supersecret \
    MAX_FILE_SIZE=300 \
    CPU_NUMBER=4

COPY configs/* /tmp/ 

ADD ./blast /var/www/html/blast

RUN mv /tmp/*.html /var/www/html/ \
    && mv /tmp/*.png /var/www/html/ \
    && mv /tmp/*.php /var/www/html/ \
    && cat /tmp/rules >> /etc/sudoers \
    && mv /tmp/default /etc/nginx/sites-available/ \
    && mv /tmp/entrypoint.sh /usr/bin/entrypoint.sh \
    && chmod +x /usr/bin/entrypoint.sh \
    && mv /tmp/admin_tools /usr/local/bin/admin_tools \
    && chmod +x /usr/local/bin/admin_tools \
    && mv /tmp/sequenceserver /etc/init.d/sequenceserver  \
    && chmod +x /etc/init.d/sequenceserver \
    && ln -s /db /var/www/html/blast/db/ \
    && chown www-data:www-data /var/www/html/* \
    && chmod 660 /var/www/html/*.* \
    && chmod o+w /var/www/html/blast/TmpGifs/ \
    && htpasswd -b -c /etc/nginx/.htpasswd admin supersecret

##################### КОНЕЦ УСТАНОВКИ #####################

ENTRYPOINT ["/usr/bin/entrypoint.sh"]

.

version: '2'
services:

    instance1-blast:
      build: .
      container_name: instance1-blast
      environment:
        - ADMIN_USER=admin
        - ADMIN_PASS=123
        - MAX_FILE_SIZE=50
        - CPU_NUMBER=5
      depends_on:
        - instance1-data
      volumes_from:
        - instance1-data
      ports:
        - "8094:80"
        - "8095:4567"

    instance1-vsftpd:
      image: fikipollo/vsftpd
      container_name: instance1-vsftpd
      environment:
        - FTP_USER=ftpuser
        - FTP_PASS=supersecret
        - ONLY_UPLOAD=YES
        - PASV_ENABLE=NO
        - FTP_HOME=/raw
        - UMASK=000
      depends_on:
        - instance1-data
      volumes_from:
        - instance1-data
      ports:
        - "8096:21"

    instance1-data:
      image: busybox
      container_name: instance1-data
      volumes:
        - /data/instance1-data/blast-data/db:/db
        - /data/instance1-data/blast-data/raw:/raw
        - /data/instance1-data/blast-data/tmp:/tmp

Заранее спасибо.

&& ln -s /db /var/www/html/blast/db/

Я не вижу в вашем Dockerfile, где создаются:

/db
/var/www/html/blast/db

директории. Обе эти директории кажутся нестандартными, и, следовательно, скорее всего, уже не существуют в вашем базовом образе. Попробуйте добавить эту строку где-то в вашем Dockerfile ПЕРЕД командой создания символической ссылки:

RUN mkdir -p /var/www/html/blast/db && \
mkdir -p /var/www/html/blast/db

Также я бы проверил, работает ли команда ls и может ли она “видеть” эти директории, как только вы подтвердите, что они создаются в файловой системе вашего образа Docker, чтобы также отразиться в файловой системе вашего контейнера…

Если это не сработает, как уже спрашивал Чарльз, пожалуйста, вставьте вывод вашей команды сборки docker и любые сообщения об ошибках, которые вы получаете при запуске контейнера из этого результирующего образа…

Ответ или решение

Проблема создания символической ссылки в Docker-контейнере

В процессе работы с Docker и создания контейнеров иногда возникают сложности с созданием символических ссылок (symlink). В вашем случае команда

ln -s /db /var/www/html/blast/db/

не выполняется по ряду причин, на которые стоит обратить внимание. Давайте разберемся шаг за шагом.

1. Отсутствие целевых директорий

Первая и наиболее вероятная причина заключается в том, что директории /db и /var/www/html/blast/db/, на которые вы хотите создать символическую ссылку, не существуют при выполнении команды в Dockerfile. Следует убедиться, что обе директории созданы до выполнения команды ln -s.

Решение: Добавьте следующие команды в ваш Dockerfile перед созданием символической ссылки:

RUN mkdir -p /db /var/www/html/blast/db

Эта команда создаст необходимые директории, что позволит без проблем создать символическую ссылку.

2. Область видимости и привилегии

Когда вы создаете символическую ссылку, важно помнить, что работа с файловой системой Docker произошла в контексте сборки образа. При запуске контейнера, если вы уже создали директории и файлы в процессе сборки, важно, чтобы права доступа и владельцы файлов были корректно настроены.

Убедитесь, что ваш контейнер запущен с правильными правами. Вы можете установить правильные права на директории и файлы, добавив следующее:

RUN chown -R www-data:www-data /var/www/html/blast

Это даст пользователю www-data (который обычно используется веб-сервером) права на чтение и запись в соответствующих директориях.

3. Рабочее окружение

Важно также убедиться, что вы выполняете проверку или работу в правильном контеоконтексте. При запуске контейнера убедитесь, что он правильно запущен и имеет доступ к созданным директориям и ссылкам.

4. Проверка ошибок

Если после выполнения всех указанных шагов возникнут проблемы с созданием символической ссылки, имейте в виду, что вывод сборки Docker может содержать полезную информацию о возможных ошибках. При отсутствии видимой ошибки выполнение команды

docker build .

может дать дополнительные подсказки о состоянии вашего контейнера и сборки.

Заключение

Вводя указанные изменения в ваш Dockerfile, вы сможете успешно создать символическую ссылку внутри вашего контейнера. Убедитесь, что директории существуют, и что контекст запуска контейнера корректен. Если проблемы сохраняются, обратитесь к журналам сборки и запуска контейнера для получения более детальной информации.

Это должно помочь в устранении проблемы, связанной с созданием символических ссылок в Docker-контейнере.

Оцените материал
Добавить комментарий

Капча загружается...