【发布时间】:2020-05-16 18:30:43
【问题描述】:
我正在尝试将 React.js 和 Node.js (Express.js) 应用程序运行到 docker 容器中。到目前为止,我已经为 React 应用程序创建了一个 Dockerfile,并为 Node.js 应用程序创建了另一个 Dockerfile。
Dockerfile(React 应用)
FROM alpine:3.11
RUN apk add --update nodejs npm
RUN mkdir /client
WORKDIR /client
RUN npm install
COPY . /client
RUN npm install --global http-server
CMD [ "http-server"]
Dockerfile(节点应用)
FROM alpine:3.11
RUN apk add --update nodejs npm
RUN mkdir /server
WORKDIR /server
COPY ./package.json /package.json
COPY ./package-lock.json /package-lock.json
RUN npm install
COPY . /server
CMD [ "node", "server.js"]
我也创建了一个像这样的 docker-compose -
version: '3'
services:
server:
build: ./backend
expose:
- 8080
environment:
API_HOST: "http://localhost:8080"
APP_SERVER_PORT: 8080
ports:
- 8080:8080
volumes:
- ./client
command: node server.js
client:
build: ./build
environment:
-REACT_APP_PORT: 8081
expose:
- 8081
ports:
- 8081:8081
volumes:
- ./server
links:
- server
command: http-server
我不明白当我运行 docker-compose up 时我的配置有什么问题,它会抛出如下所示的错误 -
Error: Error loading shared library /server/node_modules/hummus/binding/hummus.node: Exec format error
server_1 | at Object.Module._extensions..node (internal/modules/cjs/loader.js:1021:18)
server_1 | at Module.load (internal/modules/cjs/loader.js:811:32)
server_1 | at Function.Module._load (internal/modules/cjs/loader.js:723:14)
server_1 | at Module.require (internal/modules/cjs/loader.js:848:19)
server_1 | at require (internal/modules/cjs/helpers.js:74:18)
server_1 | at Object.<anonymous> (/server/node_modules/hummus/hummus.js:5:31)
server_1 | at Module._compile (internal/modules/cjs/loader.js:955:30)
server_1 | at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
server_1 | at Module.load (internal/modules/cjs/loader.js:811:32)
server_1 | at Function.Module._load (internal/modules/cjs/loader.js:723:14)
pdf_spliter_server_1 exited with code 1
client_1 | Starting up http-server, serving ./
client_1 | Available on:
client_1 | http://127.0.0.1:8080
client_1 | http://172.26.0.3:8080
client_1 | Hit CTRL-C to stop the server
【问题讨论】:
-
您可以尝试删除 node_modules 文件夹并重新安装吗?
-
volumes:声明正在覆盖图像的内容,包括node_modules树中的二进制文件,其中包含来自主机的不兼容内容。 (您是在 MacOS 还是 Windows 主机上?)尝试删除volumes:声明。 (您也不需要expose:、links:或command:,尤其是当它们在 Dockerfile 中重复指令时。) -
我在 Mac OS 上。
标签: node.js reactjs docker docker-compose dockerfile