【问题标题】:Docker creation and running image failedDocker 创建和运行镜像失败
【发布时间】: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 命令进行故障排除。通过这种方式进行调试,您可能会感觉更加熟悉和舒适。

标签: node.js docker


【解决方案1】:

一个 Dockerfile 中只能有一个 CMD 指令。如果您列出多个CMD,则只有最后一个CMD 会生效。

您可能希望您的 npm install 成为 RUN 指令,而不是 CMD

照原样,它只执行npm run 而从未执行过npm install,因此可能会立即退出并出现错误。

【讨论】:

猜你喜欢
  • 2020-10-25
  • 2022-01-02
  • 1970-01-01
  • 2021-04-23
  • 2020-10-06
  • 2019-11-26
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多