我有一个docker文件,基于php:5.5.36-apache镜像,用于创建专门用于开发的镜像。我的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
发布于 2017-11-17 14:35:03
这个链接对我来说适用于基于ubuntu的Dockerfile中的php5,apache2和memcached的相同问题:
https://github.com/moby/moby/issues/5137
安装supervisor
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"]此链接还解释了如何在容器中运行多个服务:
https://docs.docker.com/engine/admin/multi-service_container/
发布于 2016-11-29 08:52:40
apache有一个名为apache2-foreground的bash脚本,它使用exec启动apache,该脚本在Dockerfile文件的末尾用CMD ["apache2-foreground"]调用。这是Docker将在启动时执行的脚本,exec命令将执行传递给系统。
我的解决方案是复制apache2-foreground脚本并在启动apache之前启动memcached。由于这是一个用作本地开发服务器的映像,因此满足了我的需求。
更新后的apache2-foreground:#!/bin/bash设置-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通过以下方式:
COPY apache2-foreground /usr/local/bin/https://stackoverflow.com/questions/40855340
复制相似问题