【发布时间】:2021-05-23 17:03:25
【问题描述】:
当我在 Mac 或 Windows 上使用以下 3 个文件运行 docker-compose build minexample 时,图像构建成功。但是当我尝试在 AWS Linux 2 EC2 实例上做同样的事情时,它在运行 node-sass 的安装脚本时失败(见下文)。
经过 2 天的反复试验,我意识到如果我将 react-scripts 版本降低到“3.0.0”,问题就会消失。这也意味着我需要将我的开发依赖项(我不包括在最小示例中)中的 eslint 从 7.12.0 降低到 5.16.0。
我有几个问题:
- docker 构建如何在 Mac/Windows 上成功,但在 Linux 上失败?我认为容器应该是一个孤立的环境,但主机操作系统不知何故影响了这里的结果。
- 如何确定哪些节点包版本存在冲突?花了很多时间反复试验,才发现降低
react-script的版本可以解决(或隐藏)问题。
package.json
{
"name": "minexample",
"version": "1.0.0",
"dependencies": {
"node-sass": "4.12.0",
"react": "16.14.0",
"react-dom": "16.14.0",
"react-router": "5.0.0",
"react-router-dom": "5.0.0",
"react-scripts": "4.0.2"
},
"devDependencies": {
},
"scripts": {
"start": "react-scripts start"
}
}
Dockerfile
FROM node:10.16.0-alpine AS build
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ENV PATH /usr/src/app/node_modules/.bin:$PATH
# cache dependencies
COPY ./package.json /usr/src/app/package.json
RUN npm install
docker-compose.yml
version: '3.7'
services:
minexample:
build:
context: ./
dockerfile: Dockerfile
container_name: minexample
错误
> node-sass@4.12.0 install /usr/src/app/node_modules/node-sass
> node scripts/install.js
The command '/bin/sh -c npm install' returned a non-zero code: 1
ERROR: Service 'minexample' failed to build
【问题讨论】:
-
Successfully built 2954ad2931b6和Successfully tagged app_minexample:latest- 我试图复制您的问题,但它都适用于 Amazon Linux 2 实例。请仔细检查您的构建过程。 -
@Marcin 你是对的。造成此问题难以解决的部分原因是,一旦构建失败,有时会导致后续构建也失败,直到我使用
sudo service docker stop重新启动 docker 服务。我已经更新了package.json。如果由于某种原因仍然通过,这是我的完整依赖列表:pastebin.com/VZ5eVHgQ 以防万一,版本:Docker version 19.03.13-ce, build 4484c46,docker-compose version 1.28.4, build cabd5cfb -
现在可以使用了吗?抱歉,从您的评论中不确定。
-
不,一旦我将 2 个额外的依赖项添加到原始帖子(
react和react-dom),它就会失败。但是,如果这对您有用,请尝试使用 pastebin。如果这也有效,那么也许我的 docker 版本不兼容。 -
一切正常。使用 Amazon Linux 2 实例使用来自 pastebin 的依赖项构建 docker 映像没有任何问题。
标签: node.js docker amazon-ec2 node-sass react-scripts