如何在Docker中使用Dockerfile中的CMD命令以分离模式运行`httpd`?

7
这是我的Dockerfile - 镜像构建成功,但无法运行,停止了。我想从Docker容器中访问由Apache服务器提供的网站。
# build environment
FROM node:13.12.0-alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json ./
COPY package-lock.json ./
RUN npm ci --silent
RUN npm install react-scripts@3.4.1 -g --silent
COPY . ./
RUN npm run build:staging

# production environment
FROM httpd:latest
COPY --from=build /app/build /usr/local/apache2/htdocs

EXPOSE 80

CMD ["httpd"]
1个回答

5

你应该删除CMD ["httpd"],参考这里

CMD ["httpd-foreground"]

已经有前台运行的httpd了。

最后,为什么CMD ["httpd"]不能用?

Dockerfile中定义的CMD将作为容器的PID1。在docker中,如果PID1退出,则容器也会退出。

  • 如果使用CMD ["httpd-foreground"],则apache进程始终在前台运行,因此进程不会退出,容器将保持活动状态。
  • 如果使用CMD ["httpd"],则httpd将直接执行并退出,然后PID1退出,因此容器也会退出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接