Docker 图像无法在 AWS EC2 linux 上构建,但在 Windows 和 Mac 上构建时可以正常工作
Docker image failing to build on AWS EC2 linux but works when built on Windows and Mac
当我运行docker-compose build minexample
在Mac或Windows上有以下3个文件时,镜像构建成功。但是当我尝试在 AWS Linux 2 EC2 实例上做同样的事情时,它在 运行ning node-sass
的安装脚本(见下文)时失败。
经过 2 天的反复试验,我意识到如果将 react-scripts
版本降低到“3.0.0”,问题就会消失。这也意味着我需要将我的开发依赖性(我不包括在最小示例中)从 7.12.0 降低到 5.16.0.
。
我有几个问题:
- docker 构建如何在 Mac/Windows 上成功,但在 Linux 上失败?我认为容器应该是一个孤立的环境,但不知何故主机 OS 影响了这里的结果。
- 如何确定哪些节点包版本存在冲突?通过反复试验花了很多时间才发现降低
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"
}
}
Docker 文件
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
根据评论。
我试图重现该问题,但在我的测试中,docker 映像 构建成功。
已使用实例,t2.small
(尚未使用 t2.micro
进行测试)。
亚马逊Linux2:
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
Docker
docker --version
Docker version 19.03.13-ce, build 4484c46
docker-撰写
docker-compose --version
docker-compose version 1.28.4, build cabd5cfb
构建镜像
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
a_minexample latest 82968af21096 24 minutes ago 426MB
node 10.16.0-alpine 9dfa73010b19 20 months ago 75.3MB
当我运行docker-compose build minexample
在Mac或Windows上有以下3个文件时,镜像构建成功。但是当我尝试在 AWS Linux 2 EC2 实例上做同样的事情时,它在 运行ning node-sass
的安装脚本(见下文)时失败。
经过 2 天的反复试验,我意识到如果将 react-scripts
版本降低到“3.0.0”,问题就会消失。这也意味着我需要将我的开发依赖性(我不包括在最小示例中)从 7.12.0 降低到 5.16.0.
我有几个问题:
- docker 构建如何在 Mac/Windows 上成功,但在 Linux 上失败?我认为容器应该是一个孤立的环境,但不知何故主机 OS 影响了这里的结果。
- 如何确定哪些节点包版本存在冲突?通过反复试验花了很多时间才发现降低
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"
}
}
Docker 文件
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
根据评论。
我试图重现该问题,但在我的测试中,docker 映像 构建成功。
已使用实例,t2.small
(尚未使用 t2.micro
进行测试)。
亚马逊Linux2:
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
Docker
docker --version
Docker version 19.03.13-ce, build 4484c46
docker-撰写
docker-compose --version
docker-compose version 1.28.4, build cabd5cfb
构建镜像
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
a_minexample latest 82968af21096 24 minutes ago 426MB
node 10.16.0-alpine 9dfa73010b19 20 months ago 75.3MB