【发布时间】:2021-04-02 17:05:34
【问题描述】:
我正在运行一个 docker 容器,其中包含我的后端代码作为卷:
docker-compose.yml
version: '3'
services:
auth:
container_name: ${AUTH_CONTAINER}
build: ./modules/auth
working_dir: /usr/app
command: "npm install && npm start"
volumes:
- ../backend/modules/auth:/usr/app
expose:
- 9229
ports:
- 9229:9229
Dockerfile:
FROM node:alpine
WORKDIR /usr/app
COPY entrypoint.sh .
ENTRYPOINT ["sh", "/entrypoint.sh"]
入口点:
#!/usr/bin/env bash
exec "$@"
当我运行 docker-compose up 时,第一步总是运行 yarn。我收到一条错误消息,说我不应该同时使用 npm 和 yarn,因为我目前正在为项目使用 npm。有没有办法让 node:alpine 只使用 npm (我知道它已安装),然后在运行 docker-compose up 时调用 npm install ?
EDIT2:Package.json
{
"name": "auth",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1"
}
}
【问题讨论】:
-
当
node:alpine镜像被构建时,it runsyarn --version。这就是它对yarn所做的一切。 -
@Styx 在我的控制台中运行:
yarn install v1.22.5。然后出现一个带有依赖项的 yarn.lock 文件——我假设它属于 node:alpine。我在上面添加了一张控制台的图片。 -
请显示
package.json。 -
您可以在您的 Dockerfile 中执行这些步骤,并删除
volumes:吗?您的设置直接在主机上使用 Node 带来什么好处? -
@Styx 我发布了我的 package.json。 @David Maze 好吧,我计划对多个微服务进行 dockerizing。所以我认为 docker-compose(意味着我可以运行多个容器)是我想要使用的东西。
volumes:直接指向我在 modules/auth 下的项目文件,所以如果有任何变化,它会自行重建。让我大吃一惊的是,我的代码中根本没有任何引用纱线的东西:/我认为它可能来自节点:高山容器 - 但是@Styx说它没有:/