发出让memcache容器在Docker中自动启动的问题

时间:2016-08-04 23:21:59

标签: docker memcached containers

我有一个正在构建的容器,它只包含memcached,我希望它在容器构建后启动。

这是我当前的Docker文件 -

FROM centos:7
MAINTAINER Some guy <someguy@guysome.org>
RUN yum update -y
RUN yum install -y git https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

RUN yum install -y ansible && yum clean all -y
RUN yum install -y memcached
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;

VOLUME [ "/sys/fs/cgroup" ]
EXPOSE 11211/tcp 11211/udp
CMD ["/usr/bin/memcached"]
#CMD ["/usr/bin/memcached -u root"]
#CMD ["/usr/bin/memcached", "-D", "FOREGROUND"]

容器构建成功,但是当我尝试使用命令

运行容器时

docker run -d -i -t -P <image id>,我看不到docker ps返回的列表中的图片。

我试图让我的memcached服务以与我的httpd容器相同的方式运行,但是我无法使用-D标志传递参数(因为它已经是一个守护进程,我猜)。这就是我的httpd CMD的设置方式 -

CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

在本地,如果我运行命令/usr/bin/memcached -u root它作为一个进程运行,但当我尝试容器CMD时,它通知我它找不到指定的文件(与 - 有关 - 你根节我猜。)

CMD设置为/ bin / bash仍然不允许服务启动。

如何运行我的memcached服务并允许在运行docker ps时看到它,以便我可以在其中打开bash部分?

感谢。

2 个答案:

答案 0 :(得分:1)

默认情况下,memcached将在前台运行,这就是你想要的。 -d option would run memcached as a daemon会导致容器立即退出。

Dockerfile看起来过于复杂,试试这个

FROM centos:7
RUN yum update -y && yum install -y epel-release && yum install -y memcached && yum clean all
EXPOSE 11211
CMD ["/usr/bin/memcached","-p","11211","-u","memcached","-m","64"]

然后你可以做你需要的事情

$ docker build -t me/memcached .
<snipped build>

$ CID=$(docker create me/memcached)

$ docker start $CID
4ac5afed0641f07f4694c30476cef41104f6fd864c174958b971822005fd292a

$ docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED              STATUS              PORTS                    NAMES
4ac5afed0641        me/memcached                  "/usr/bin/memcached -"   About a minute ago   Up 4 seconds        11211/tcp                jovial_bardeen

$ docker exec $CID ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
memcach+     1     0  0 01:03 ?        00:00:00 /usr/bin/memcached -p 11211 -u memcached -m 64
root        10     0  2 01:04 ?        00:00:00 ps -ef


$ docker exec -ti $CID bash
[root@4ac5afed0641 /]# 

答案 1 :(得分:1)

如果实际上只运行memcached并使用:

,请跳过Dockerfile
docker run --name my-memcache -d memcached

至少要进行基本设置,然后您可以根据需要更新该官方图像。