【发布时间】:2021-08-23 15:29:26
【问题描述】:
我正在 Docker 中构建一个 Node 应用程序。这是我的 Dockerfile:
FROM docker.artifacts.smit.sise/node:12.19.1
COPY . .
RUN mkdir certs \
&& cd /certs \
&& wget https://artifacts.smit.sise/artifactory/smit-certs-public/smit_ca.pem --no-check-certificate \
&& npm config set cafile /certs/smit_ca.pem \
&& npm config set registry https://artifacts.smit.sise/api/npm/npm
RUN mkdir /common_front/build/static \
&& ln -sf /front/build/assets/* /valisveeb_common_front/build/assets \
&& ln -sf /front/build/static/* /valisveeb_common_front/build/static \
&& ln -sf /front/build/generate.options.js/ \
&& ln -sf /front/build/settings.json /valisveeb_common_front/build/settings.json
#RUN cp -f envexample build/.env
WORKDIR /front/build
RUN ls -la \
&& npm install
RUN npm run dev
EXPOSE 3000
在本地使用这些确切的命令可以正常工作,但是在执行 Dockerfile 时,浏览器上什么也没有显示,尽管应用程序说“正在侦听端口 3000”。
这是我看到的:
https://i.stack.imgur.com/TwCqB.png
编辑: 这就是我运行它的方式:
docker build . && docker run -d --restart=always -p 3000:3000 . -it --ignore-certificate-errors
【问题讨论】:
-
when executing the Dockerfile, nothing appears on browser。看来这里有点误会了。你“执行”一个 Dockerfile 来构建一个 docker 镜像。构建此映像后,您可以使用该映像运行一个或多个容器。这些容器使用默认命令或您在运行时传递的任何命令运行。考虑到这一点,我怀疑 Dockerfile 的倒数第二行应该是CMD npm run dev(在容器启动时启动服务,而不是在构建期间启动)。您还应该告诉我们您用来启动容器的命令是什么。 -
localhost=127.0.0.1。你应该在CMDWindows 中运行ipconfig并找到你的IP(通常是192.168IP),然后像192.168.43.56:3000一样运行 -
@Saeed 如果容器和浏览器位于同一主机上,则 localhost 可以正常使用端口转发
-
@Zeitounator 这是我用 docker build 运行的。 && docker run -d --restart=always -p 3000:3000 。 -it --ignore-certificate-errors
-
您在
docker build命令期间运行服务,因此映像构建永远不会结束。docker run甚至没有到达。
标签: node.js docker dockerfile