2016-11-28 6 views
0

開発のためにイメージを明示的に作成するために、私はphp:5.5.36-apacheイメージをベースにしているドッカーファイルを持っています。私のDockerfileはmemcachedをインストールしますが、私は起動時にmemcachedを取得することができません。私がコンテナにsshで手動でmemcachedを起動すると、うまく始まります。公式のphpドッカー画像を使用し、起動時にmemcachedを実行する

FROM php:5.5.36-apache 

RUN apt-get update \ 
    && apt-get install -y --no-install-recommends \ 
    default-jdk 
RUN apt-get install -y --no-install-recommends autoconf  
RUN apt-get install -y --no-install-recommends python python-pip 

RUN apt-get update && apt-get install -y libmemcached-dev \ 
    apt-utils re2c g++ memcached \ 
    zlib1g zlib1g-dbg zlib1g-dev zlibc mysql-client php5-mysql \ 
    && pecl install memcached \ 
    && docker-php-ext-enable memcached\ 
    && pecl install memcache \ 
    && docker-php-ext-enable memcache 

RUN docker-php-ext-install pdo pdo_mysql 

RUN apt-get install -y gettext 

RUN pip install hgapi 

RUN a2enmod headers \ 
    && a2enmod rewrite 

COPY ./apache2.conf /etc/apache2/apache2.conf 

RUN mkdir /var/www/content 

EXPOSE 11211 

RUN systemctl enable memcached.service 

は、ベース画像は、Debianに基づいている:ジェシー

+0

あなたはRUNを悪用します。 RUNはあなたが必要とするソフトウェアのインストールと設定を支援し、ADD/COPYはファイルを追加し、ENVは環境変数を定義し、CMDとENTRYPOINTはあなたのものを起動するので、mysqldはMysqlドッカーのイメージで起動し、Apache dockerイメージのApacheも起動します。 DockerfileにCMDまたはENTRYPOINTが表示されません。 https://docs.docker.com/engine/reference/builder/#/cmdとhttps://docs.docker.com/engine/reference/builder/#/entrypoint – user2915097

+0

の画像を確認します。それは本当に私を混乱させていた部分でした。私の答えは以下を参照してください、私は今より良いです。 –

答えて

0

PHP:5.5.36-ApacheはApacheを起動するexecを使用するのapache2-前景と呼ばれるbashスクリプトを持って、そのスクリプトがでCMD ["apache2-foreground"]と呼ばれDockerfileの最後。これは起動時にDockerによって実行される1つのスクリプトで、execコマンドは実行をシステムに渡します。

非常にうまくいかず、あらゆるプロダクションサーバでこれを行うことを推奨しない私の解決策は、apache2-foregroundスクリプトをコピーして、apacheの起動前にmemcachedを起動することです。これはローカル開発サーバーとして使用するイメージなので、これは私のニーズを満たしています。

apache2-foreground更新:! #/ binに/ bashの はその後

# Apache gets grumpy about PID files pre-existing 
rm -f /var/run/apache2/apache2.pid 

/etc/init.d/memcached start 
exec apache2 -DFOREGROUND 

-eを設定し、私は置き換え:

RUN systemctl enable memcached.service 

で:このリンクは働いた

COPY apache2-foreground /usr/local/bin/ 
0

私は同じ問題のphp5、apache2とmemcached DockでUbuntuのに基づいてerfile:このリンクはまた、容器の中に複数のサービスを実行する方法について説明し

RUN touch /etc/supervisor/conf.d/supervisord.conf && \ 
    echo "[supervisord]" >> /etc/supervisor/conf.d/supervisord.conf && \ 
    echo "nodaemon=true" >> /etc/supervisor/conf.d/supervisord.conf 

RUN touch /etc/supervisor/conf.d/memcached.conf && \ 
    echo "[program:memcache]" >> /etc/supervisor/conf.d/memcached.conf && \ 
    echo "command=/usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1 -DFOREGROUND" >> /etc/supervisor/conf.d/memcached.conf && \ 
    echo "autostart=true" >> /etc/supervisor/conf.d/memcached.conf && \ 
    echo "autorestart=true" >> /etc/supervisor/conf.d/memcached.conf 

RUN touch /etc/supervisor/conf.d/apache2.conf && \ 
    echo "[program:apache2]" >> /etc/supervisor/conf.d/apache2.conf && \ 
    echo 'command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"' >> /etc/supervisor/conf.d/apache2.conf && \ 
    echo "autostart=true" >> /etc/supervisor/conf.d/apache2.conf && \ 
    echo "autorestart=true" >> /etc/supervisor/conf.d/apache2.conf 

CMD ["/usr/bin/supervisord"] 

Dockerfileでスーパーバイザ

RUN apt-get install -y supervisor 

と設定をインストール

https://github.com/moby/moby/issues/5137

https://docs.docker.com/engine/admin/multi-service_container/

関連する問題