docker - docker构建一个安装了httpd和memcached的镜像,但是当使用这个镜像运行一个容器时,memcached没有启动
问题描述
我构建了一个安装了 httpd 和 memcached 的映像,我希望当我使用这个映像启动一个容器时,memcached 和 httpd 都已启动。
这是我的码头文件
FROM amazonlinux:2
MAINTAINER tian
# Install necessary commands
RUN yum update -y
RUN yum install tar -y
RUN yum install unzip -y
RUN yum install wget -y
RUN yum install -y procps
RUN yum install telnet -y
#install apache httpd
RUN yum install httpd -y
# Install memcached and libmemcached in Amazon Linux 2
RUN yum install -y libevent libevent-devel
RUN yum install -y gcc make
RUN wget http://www.memcached.org/files/memcached-1.4.24.tar.gz
RUN tar xvzf memcached-1.4.24.tar.gz
RUN /memcached-1.4.24/configure --enable-64bit
RUN make && make install
CMD ["-D", "FOREGROUND"]
#start httpd, work
ENTRYPOINT ["/usr/sbin/httpd"]
#start memcached, not work
ENTRYPOINT ["memcached","-u","nobody","-m","512","-p","11211","127.0.0.1", "start"]
EXPOSE 80
构建镜像
docker build -t demo ./ --ulimit nofile=20480:40960 --ulimit nproc=1024:2048
用这个图像启动一个容器,进入 shell
PS D:\Docker> docker run -d -p 80:80 demo
8619a58a948893916d4a70fcdb89ca2f6c1384a17e29b50a45a4f358fae38afb
PS D:\Docker> docker exec -it 8619a58a948893916 /bin/bash
bash-4.2# ps -ef|grep httpd
root 1 0 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
apache 6 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
apache 7 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
apache 9 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
apache 14 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
apache 15 1 0 13:59 ? 00:00:00 /usr/sbin/httpd -D FOREGROUND
root 60 52 0 14:00 pts/0 00:00:00 grep httpd
bash-4.2# ps -ef|grep memcached
root 62 52 0 14:00 pts/0 00:00:00 grep memcached
bash-4.2# memcached -d -u nobody -m 512 -p 11211 127.0.0.1 start
bash-4.2# ps -ef|grep memcached
nobody 72 1 0 14:06 ? 00:00:00 memcached -d -u nobody -m 512 -p 11211 127.0.0.1 start
root 79 52 0 14:06 pts/0 00:00:00 grep memcached
bash-4.2#
可以看到httpd是自动启动的,但是memcached直到我手动运行才启动memcached -d -u nobody -m 512 -p 11211 127.0.0.1 start
我也试了redhat7,也不行
FROM registry.access.redhat.com/ubi7/ubi:latest
MAINTAINER tian
# Install necessary commands
RUN yum update -y
RUN yum install unzip -y
RUN yum install httpd -y
RUN yum install wget -y
RUN yum install telnet -y
# Install memcached and libmemcached in RHEL 7
RUN yum install memcached libmemcached -y
# can not start memcached
#RUN systemctl enable memcached.service
#RUN systemctl start memcached.service
CMD ["-D", "FOREGROUND"]
ENTRYPOINT ["/usr/sbin/httpd"]
EXPOSE 80
我怎样才能让 memcached 也自动启动?
谢谢
解决方案
Docker 只能运行 1 个服务。所以通常你会需要一个容器来为你的 2 个服务(httpd + memcached)中的每一个服务。
如果您真的需要它,您可以使用服务管理器脚本来控制单个容器中的多个服务(请参阅https://docs.docker.com/config/containers/multi-service_container/)。
推荐阅读
- python - 可以从不同位置调用脚本时如何编写导入语句?
- sorting - 如何进行默认多排序?
- git - 用易于理解的术语解释 Git 基础
- javascript - 我在 mvc、LoadBooks、RequirementBooks 中有 2 个视图
- python - 如何在不出现“TypeError:字符串索引必须是整数”的情况下对图像进行 numpy 切片
- powershell - Powershell:从 CSV (UTF8) 替换德语
- android - AutoCompleteTextView 和 EditText 在其他活动中为空
- sql - 具有独立 ORDER BY 排序的“SELECT UNION SELECT”查询?
- css - (React) 带有 CSS 模块的 CSSTransition
- java - 如何找到包含包含的动态框架