Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用官方php docker映像并在启动时运行memcached_Php_Docker_Debian_Memcached_Boot - Fatal编程技术网

使用官方php docker映像并在启动时运行memcached

使用官方php docker映像并在启动时运行memcached,php,docker,debian,memcached,boot,Php,Docker,Debian,Memcached,Boot,我有一个基于php:5.5.36-apache映像的docker文件,用于创建专门用于开发的映像。我的Dockerfile安装了memcached,但我没有运气让memcached在启动时启动。如果我ssh到容器中并手动启动memcached,那么它就可以正常启动 FROM php:5.5.36-apache RUN apt-get update \ && apt-get install -y --no-install-recommends \ default-

我有一个基于php:5.5.36-apache映像的docker文件,用于创建专门用于开发的映像。我的Dockerfile安装了memcached,但我没有运气让memcached在启动时启动。如果我ssh到容器中并手动启动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:jessie

php:5.5.36-apache有一个名为apache2前台的bash脚本,它使用
exec
启动apache,该脚本在Dockerfile的末尾用
CMD[“apache2前台”]
调用。这是Docker在启动时将执行的一个脚本,
exec
命令将执行传递给系统

我的解决方案是复制
apache2前台
脚本,并在apache启动之前启动memcached。我的解决方案很不雅观,我不建议对任何类型的生产服务器执行此操作。由于这是一个用作本地开发服务器的映像,因此满足了我的需要

更新后的apache2前台: #!/bin/bash set-e

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

/etc/init.d/memcached start
exec apache2 -DFOREGROUND
然后我替换了:

RUN systemctl enable memcached.service
与:


对于基于ubuntu的Dockerfile中的php5、apache2和memcached,这个链接对我同样适用:

安装主管

RUN apt-get install -y supervisor
并在Dockerfile中配置:

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"]
此链接还说明了如何在容器中运行多个服务:


你跑错了。RUN帮助您安装和配置所需的软件,添加/复制添加文件,ENV定义您的环境变量,CMD和ENTRYPOINT启动您的东西,因此它们在Mysql docker映像中启动mysqld,在apache docker映像中启动apache,等等。我在Dockerfile中没有看到CMD或ENTRYPOINT。检查文档,我开始使用的图像有一个启动apache的CMD,这确实是让我困惑的部分。看看下面我的答案,我现在好多了。
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"]