【发布时间】:2020-11-18 12:42:06
【问题描述】:
我正在尝试在 docker 中将示例 react.js 应用程序容器化。
我的docker文件如下,我在项目的工作目录中
FROM node:10-alpine
RUN mkdir -p /var/tmp/thermodocker && chown -R root:root /var/tmp/thermodocker
WORKDIR /var/tmp/thermodocker
COPY * ./
USER root
RUN [ "npm", "install","--python","python2" ]
EXPOSE 3000
CMD [ "npm", "run" ]
我可以成功创建图像
[root@******]# docker build -t thermo-api .
...
Successfully built c6697819c3e1
Successfully tagged thermo-api:latest
但是,当我想运行应用程序时,它不会作为正在运行的 docker 映像出现
[root@******]# docker run -d -p 3000:3000 --name thermo-api-app thermo-api
51b873637ac12ee2a89d075edf1953c29b41826b6b3847659d7763d42516916a
INFO[2020-07-29T01:01:30.555414295Z] shim containerd-shim started address="/containerd-shim/moby/51b873637ac12ee2a89d075edf1953c29b41826b6b3847659d7763d42516916a/shim.sock" debug=false pid=8021
[root@********]# INFO[2020-07-29T01:01:31.081201052Z] shim reaped id=51b873637ac12ee2a89d075edf1953c29b41826b6b3847659d7763d42516916a
INFO[2020-07-29T01:01:31.088559217Z] ignoring event module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
[root@******]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@thermo-breast-cancer-devvm1 thermo-api]#
我不确定我在哪里做错了?
[PS:] 每 cmets 我已将 CMD 更改为
RUN [ "npm", "install","--python","python2" ]
但是我无法构建图像
Step 6/8 : RUN [ "npm", "install","--python","python2" ]
---> Running in 77155726f35e
INFO[2020-07-29T01:35:38.577900480Z] shim containerd-shim started address="/containerd-shim/moby/77155726f35ed6f7464d6e801d767221d62e0e31fd7e342835b6d861e3694b57/shim.sock" debug=false pid=8717
npm ERR! code EAI_AGAIN
npm ERR! errno EAI_AGAIN
npm ERR! request to https://registry.npmjs.org/python2 failed, reason: getaddrinfo EAI_AGAIN registry.npmjs.org registry.npmjs.org:443
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-07-29T01_35_44_304Z-debug.log
INFO[2020-07-29T01:35:44.354721669Z] shim reaped id=77155726f35ed6f7464d6e801d767221d62e0e31fd7e342835b6d861e3694b57
INFO[2020-07-29T01:35:44.361799117Z] ignoring event
【问题讨论】:
-
FWIW,对于开发构建,典型的模式是只复制第一层的 package.json,然后运行 npm install,然后在后续层复制源,这意味着 npm install 不必在每次更改源时都运行。见Dockerizing a Node.js web app
-
您好,我已将 CMD 更改为 RUN,但在构建映像时出现新错误!我还需要将 python 捆绑到图像中吗?
-
容器日志中有什么(如果有的话);尝试运行
docker logs thermo-api-app或重复docker run命令而不使用-d选项?与直接在这里运行 Node 相比,您希望从 Docker 获得什么好处? -
请在编辑问题时更加小心。您的问题现在同时说明:1)“我可以成功创建图像”和 2)“但是我无法构建图像”。我只能想象你的构建在
npm install上失败了。只需省略该步骤(tail -f /dev/null是一个合理的无操作 CMD,可以在您进行故障排除时保持容器活动),然后执行到容器中并自己交互运行 npm install 命令进行故障排除。通过这种方式进行调试,您可能会感觉更加熟悉和舒适。