首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用官方php docker镜像并在启动时运行memcached

问使用官方php docker镜像并在启动时运行memcached
EN

Stack Overflow用户
提问于 2016-11-29 07:31:24
回答 2查看 2.1K关注 0票数 2

我有一个docker文件,基于php:5.5.36-apache镜像,用于创建专门用于开发的镜像。我的Dockerfile安装了memcached,但我没有在引导时启动memcached。如果我通过ssh进入容器并手动启动memcached,它就可以正常启动。

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

发布于 2017-11-17 14:35:03

这个链接对我来说适用于基于ubuntu的Dockerfile中的php5,apache2和memcached的相同问题:

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

安装supervisor

代码语言:javascript
复制
RUN apt-get install -y supervisor

并在Dockerfile中进行配置:

代码语言:javascript
复制
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/

票数 3
EN

Stack Overflow用户

发布于 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

代码语言:javascript
复制
# Apache gets grumpy about PID files pre-existing
rm -f /var/run/apache2/apache2.pid

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

然后我替换了:

代码语言:javascript
复制
RUN systemctl enable memcached.service

通过以下方式:

代码语言:javascript
复制
COPY apache2-foreground /usr/local/bin/
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40855340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档