Сборка Docker не работает на MKDIR - PullRequest
0 голосов
/ 13 июня 2018

Я использую Dockerfile для создания образа Apache2 Ubuntu.Когда ему нужно создать каталоги, он не может сказать, что некоторые из этих каталогов уже существуют, но на самом деле их нет вообще.Dockerfile:

FROM ubuntu:latest
    MAINTAINER Bernard Tapis
    RUN apt-get -yqq update && apt-get install -yqq apache2

WORKDIR /var/www/html

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
RUN mkdir p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR

ENTRYPOINT ["/usr/sbin/apache2"]
CMD ["-D", "FOREGROUND"]
EXPOSE 80

Ошибка, которую я получаю при выполнении docker image build -t quentinneves/apache .

Step 11/14 : RUN mkdir p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR
 ---> Running in 1d72a8fd64c0
mkdir: cannot create directory '/var/log/apache2': File exists
The command '/bin/sh -c mkdir p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR' returned a non-zero code: 1

Но когда я использую ls -lsa /var/log/:

root@VIR1-DOCKER:~/Docker/Apache# ls -lsa /var/log/
total 1576
  4 drwxr-xr-x  5 root root   4096 Jun  1 13:42 .
  4 drwxr-xr-x 11 root root   4096 Jun  1 13:35 ..
 16 -rw-r--r--  1 root root  13515 Jun 13 07:33 alternatives.log
  4 drwxr-xr-x  2 root root   4096 Jun 13 07:33 apt
 12 -rw-r-----  1 root adm    8773 Jun  6 15:17 auth.log
  4 -rw-------  1 root utmp    768 Jun  6 07:06 btmp
 76 -rw-r-----  1 root adm   70771 Jun 13 08:05 daemon.log
108 -rw-r-----  1 root adm  107936 Jun  6 07:05 debug
268 -rw-r--r--  1 root root 269141 Jun 13 07:33 dpkg.log
  8 -rw-r--r--  1 root root  32032 Jun  6 07:05 faillog
  4 drwxr-xr-x  3 root root   4096 Jun  1 13:39 installer
356 -rw-r-----  1 root adm  363005 Jun 13 08:05 kern.log
 12 -rw-rw-r--  1 root utmp 292292 Jun  6 15:09 lastlog
252 -rw-r-----  1 root adm  255033 Jun 13 08:05 messages
428 -rw-r-----  1 root adm  435499 Jun 13 08:05 syslog
  4 drwxr-x---  2 root adm    4096 Jun  6 07:01 unattended-upgrades
 16 -rw-rw-r--  1 root utmp  15744 Jun  6 15:10 wtmp

Сюрприз, его там нет!Раньше это было /var/lock/apache2, которое вызвало эту проблему, но оно как-то прошло, и теперь /var/log/apache2 просто не будет создано.

Если я удалю создание этой папки и создам ее вручную, будет ли она работать для созданияновый образ для докера?И знаете, почему он думает, что такая папка уже есть?

1 Ответ

0 голосов
/ 13 июня 2018

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

Вы определили APACHE_LOG_DIR = APACHE_RUN_DIR, поэтому ваша команда RUN mkdir p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR пытается создать его дважды, и она терпит неудачу.

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

Чтобы защитить это, добавьте exit 0в конце RUN mkdir или измените один ENV:

ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2   <--- the same than APACHE_LOG_DIR
ENV APACHE_LOCK_DIR /var/lock/apache2
RUN mkdir p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR; exit 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...