2017-02-05 2 views
2
  1. Я создал изображение для своего приложения с apache, созданный из него контейнер работает отлично. Я могу видеть страницу на localhost. (Файл # 1: докер-compose.yml)
  2. я нажимаю изображение для докер HUB
  3. я воссоздать контейнер с помощью другого (файл # 2: докер-Compose-prod.yml) для того же приложения, и это выход из сразу же без каких-либо ошибок, выходной контейнер был:Контейнер-докер из изображения, созданного сборкой: работает, но не работает с вытащенного изображения

    модуля перезаписи уже включен HTTPD (PID 1) уже работает

Вот приложение служба описана в Докер-compose.ym л файл # 1, который я использовал для сборки:

app: 
    build: . 
    links: 
     - db 
     - memcache:memcached 
     - search 
    ports: 
     #- 8080:80 # when varnish enabled 
     - 80:80 
    restart: always 
    environment: 
     DB_HOST: db:3306 
     DB_PASSWORD: ***** 
     SEARCH_HOST: search:9312 
     MEMCACHE_HOST: memcache:11211 

Вот докер-Compose-prod.yml, файл # 2 я использовал для развертывания, который содержит проблемы:

app: 
    image: vendor/app 
    #restart: always 
    links: 
     - db 
     - memcache:memcached 
     - search 
    ports: 
     #- 8080:80 # when varnish enabled 
     - 80:80 
    environment: 
     DB_HOST: db:3306 
     DB_PASSWORD: ***** 
     SEARCH_HOST: search:9312 
     MEMCACHE_HOST: memcache:11211 
    #networks: 
     #- proxy 
     #- backend 

Контейнеры следующих услуг являются всегда и работает:

- db 
    - memcache:memcached 
    - search 

Некоторые детали:

Я бегу Докер-compose.yml (файл # 1) из внутри каталога приложений:

/home/user/app1$ docker-compose up -d

и второй файл из другой директории

/home/user/app2$ docker-compose -f docker-compose-prod.yml up -d

Вот Dockerfile:

FROM ubuntu:trusty 
MAINTAINER vendor 

# Install base packages 
RUN apt-get update && \ 
    DEBIAN_FRONTEND=noninteractive apt-get -yq install \ 
     curl \ 
     apache2 \ 
     libapache2-mod-php5 \ 
     php5-mysql \ 
     php5-mcrypt \ 
     php5-gd \ 
     php5-curl \ 
     php-pear \ 
     php5-memcache \ 
     php-apc && \ 
    rm -rf /var/lib/apt/lists/* 

#ENV ALLOW_OVERRIDE **False** 


RUN /usr/sbin/php5enmod mcrypt 

RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf && \ 
    sed -i "s/variables_order.*/variables_order = \"EGPCS\"/g" /etc/php5/apache2/php.ini 


# Add image configuration and scripts 
ADD run.sh /run.sh 
RUN chmod 755 /*.sh 

# Configure /app folder with sample app 
RUN mkdir -p /app && rm -fr /var/www/html && ln -s /app /var/www/html 
WORKDIR /app 
ADD . /app 

RUN chmod 0777 -R /var/www/html/app/tmp 

RUN ln -sf /dev/stderr /var/www/html/app/tmp/logs/error.log 
RUN ln -sf /dev/stdout /var/www/html/app/tmp/logs/debug.log 

RUN chown www-data:www-data /app -R 
# should not be run inside container 
#RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer 
#RUN /usr/local/bin/composer install 
#RUN php vendor/bin/phinx migrate 

EXPOSE 80 
CMD ["/run.sh"] 

И run.sh

#!/bin/bash 

if [ "$ALLOW_OVERRIDE" = "**False**" ]; then 
    unset ALLOW_OVERRIDE 
else 
    sed -i "s/AllowOverride None/AllowOverride All/g" /etc/apache2/apache2.conf 
    a2enmod rewrite 
fi 

source /etc/apache2/envvars 

exec apache2 -D FOREGROUND 
+0

Можете ли вы показать мне, пожалуйста, Dockerfile и entrypoint .sh для изображения 'app'? –

+0

@BukharovSergey Привет, добавил Dockerfile и run.sh entrypoint. –

ответ

0

Это происходит потому, что на самом деле

модуль переписан уже включен

Почему это происходит?

При создании контейнера rewrite_module отключен. И run.sh включите его. Позже вы остановите контейнер (но не удаляете) и запустите его снова. Но run.sh запускается каждый раз при запуске контейнера. И run.sh пытаются загрузить этот модуль снова, и вы получите сообщение об ошибке.

Вы можете игнорировать ошибку или вы можете изменить run.sh что-то вроде:

#!/bin/bash 

if [ "$ALLOW_OVERRIDE" = "**False**" ]; then 
    unset ALLOW_OVERRIDE 
else 
    sed -i "s/AllowOverride None/AllowOverride All/g" /etc/apache2/apache2.conf 

    if [! httpd -M | grep rewrite_module]; then 
     a2enmod rewrite; 
    fi; 
fi 

source /etc/apache2/envvars 

apache2 -D FOREGROUND 

Я надеюсь, что я помог тебе.

+0

Хм, это не помогло. Я вижу только что «httpd (pid 1) уже запущен», но контейнер вышел. –

+0

ok, Первая волна, которую мы исправили. Попытайтесь заменить 'exec apache2 -D FOREGROUND' на' apache2 -D FOREGROUND', он исправит вторую troube –

+0

Наконец-то у меня это работает. Проблема, описанная в https://github.com/docker-library/php/issues/187 и решение по адресу https://github.com/docker-library/php/blob/bdfd0fc1d19102cd6f951614072a51eabf7191bf/5.6/apache/apache2 -foreground удаление # Apache получает сердитый о файлах PID, существовавших ранее rm -f /var/run/apache2/apache2.pid помог. Спасибо Сергею за быстрый ответ! –

Смежные вопросы