让内存缓存容器在 Docker 后自动启动的问题
Issue getting memcache container to automatically start in Docker
我有一个正在构建的容器,它只真正包含 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
它告诉我它不能找到指定的文件(我猜与 -u 根部分有关)。
将 CMD
设置为 /bin/bash 仍然不允许服务启动。
我怎样才能拥有我的 memcached 服务 运行 并允许它在我 运行 docker ps
时被看到,这样我就可以在里面打开一个 bash 部分是吗?
谢谢。
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 /]#
或者跳过你的 Dockerfile,如果它实际上只运行 memcached 并使用:
docker run --name my-memcache -d memcached
至少要进行基本设置,然后您可以根据需要更新官方映像。
我有一个正在构建的容器,它只真正包含 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
它告诉我它不能找到指定的文件(我猜与 -u 根部分有关)。
将 CMD
设置为 /bin/bash 仍然不允许服务启动。
我怎样才能拥有我的 memcached 服务 运行 并允许它在我 运行 docker ps
时被看到,这样我就可以在里面打开一个 bash 部分是吗?
谢谢。
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 /]#
或者跳过你的 Dockerfile,如果它实际上只运行 memcached 并使用:
docker run --name my-memcache -d memcached
至少要进行基本设置,然后您可以根据需要更新官方映像。