如何使用 Dockerfile 中的 CMD 以分离模式在 Docker 中运行“httpd”?

nki*_*rit 7 apache docker reactjs dockerfile docker-compose

这是我的 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"]
Run Code Online (Sandbox Code Playgroud)

atl*_*ine 5

你应该删除CMD ["httpd"],看看这个

CMD [“httpd-前景”]

那里已经有一个前台 httpd 了。

最后,为什么 CMD [“httpd”] 不起作用?

CMD中定义的将Dockerfile充当PID1您的容器。在docker中,如果PID1退出,那么,容器也会退出。

  • 如果使用CMD ["httpd-foreground"],apache进程会一直在前面,所以进程不会退出,那么容器是活的。
  • 如果使用CMD ["httpd"],则httpd执行完后会直接退出,然后PID1退出,因此容器退出。