Вопрос или проблема
К сожалению, я не могу создать эту символическую ссылку (&& 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-контейнере.