如何在 Google Cloud 的 Dockerfile 中设置守护进程服务
How to setup a daemon service in a Dockerfile for Google Cloud
我想在 Google 云上创建一个 运行s squid 代理服务的 Dockerfile。我对 ENTRYPOINT 有点困惑:
FROM ubuntu:latest
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NONINTERACTIVE_SEEN true
ENV SQUID_CACHE_DIR=/var/spool/squid
ENV SQUID_LOG_DIR=/var/log/squid
RUN apt-get install -y squid apache2-utils
COPY ./etc/squid/passwd /etc/squid
COPY ./etc/squid/squid.conf /etc/squid
EXPOSE 3128/tcp
WORKDIR /root
ENTRYPOINT service squid start && bash
Squid 是一项后台服务,因此我不得不添加 "bash" 命令以保持容器启动并 运行ning。有没有更合适的方法来保持容器启动并 运行ning?
当我在本地 运行 容器正常工作时:
docker run -d --name docker_squid -p 3128:3128 --rm -t docker_squid bash
和
curl -x http://localhost:3128 -L https://www.example.com
然而,当我在 google 云上构建和 运行 映像时,squid 进程似乎一直在重新启动,因此它完全忽略了 bash 语句。有什么想法吗?
在什么情况下更适合使用:
CMD service squid start && tail -F /var/log/squid/access.log
一般来说,您应该假设像 service
这样的命令在 Docker 中不起作用。您希望容器的主要进程是服务本身,这通常意味着 运行 直接连接服务器进程。 The Squid FAQ 建议调用类似
CMD ["squid", "-NCd1"]
特别是 -N
选项使它 运行 作为前台非守护进程。
(如果可以的话,您还应该更喜欢 CMD
和 ENTRYPOINT
的 JSON-ish 形式。虽然很多人更喜欢 ENTRYPOINT
,但我总是使用 CMD
如果它是一个选项,以便在 docker run
时更容易覆盖,并允许入口点脚本模式执行启动前初始化,然后 运行s CMD
。 )
我想在 Google 云上创建一个 运行s squid 代理服务的 Dockerfile。我对 ENTRYPOINT 有点困惑:
FROM ubuntu:latest
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NONINTERACTIVE_SEEN true
ENV SQUID_CACHE_DIR=/var/spool/squid
ENV SQUID_LOG_DIR=/var/log/squid
RUN apt-get install -y squid apache2-utils
COPY ./etc/squid/passwd /etc/squid
COPY ./etc/squid/squid.conf /etc/squid
EXPOSE 3128/tcp
WORKDIR /root
ENTRYPOINT service squid start && bash
Squid 是一项后台服务,因此我不得不添加 "bash" 命令以保持容器启动并 运行ning。有没有更合适的方法来保持容器启动并 运行ning?
当我在本地 运行 容器正常工作时:
docker run -d --name docker_squid -p 3128:3128 --rm -t docker_squid bash
和
curl -x http://localhost:3128 -L https://www.example.com
然而,当我在 google 云上构建和 运行 映像时,squid 进程似乎一直在重新启动,因此它完全忽略了 bash 语句。有什么想法吗?
在什么情况下更适合使用:
CMD service squid start && tail -F /var/log/squid/access.log
一般来说,您应该假设像 service
这样的命令在 Docker 中不起作用。您希望容器的主要进程是服务本身,这通常意味着 运行 直接连接服务器进程。 The Squid FAQ 建议调用类似
CMD ["squid", "-NCd1"]
特别是 -N
选项使它 运行 作为前台非守护进程。
(如果可以的话,您还应该更喜欢 CMD
和 ENTRYPOINT
的 JSON-ish 形式。虽然很多人更喜欢 ENTRYPOINT
,但我总是使用 CMD
如果它是一个选项,以便在 docker run
时更容易覆盖,并允许入口点脚本模式执行启动前初始化,然后 运行s CMD
。 )