【发布时间】:2021-03-29 16:00:55
【问题描述】:
尝试在 Docker 上为我的应用程序启动后端时遇到问题。当我在 VS Code 上选择 Compose Up 时出现以下错误。我读到我需要在我的 Dockerfile 中添加RUN chmod -x docker-entrypoint.sh,但它并没有解决问题。
Successfully built some_id_abc123
mongodb is up-to-date
cache is up-to-date
Recreating some_project_server ... error
ERROR: for some_project_server Cannot start service server: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "docker-entrypoint.sh": executable file not found in $PATH: unknown
ERROR: for server Cannot start service server: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "docker-entrypoint.sh": executable file not found in $PATH: unknown
ERROR: Encountered errors while bringing up the project.
The terminal process "/bin/zsh '-c', 'docker-compose -f "docker-compose.yml" up -d --build'" terminated with exit code: 1.
Dockerfile:
FROM node
WORKDIR /usr/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD npm run dev
docker-compose.yml:
version: "3"
services:
database:
image: mongo
container_name: mongodb
restart: always
ports:
- "27017:27017"
environment:
- MONGO_INITDB_DATABASE=some_db
- MONGO_INITDB_ROOT_USERNAME=some_user
- MONGO_INITDB_ROOT_PASSWORD=some_password
volumes:
- ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
- ./mongo-volume:/data/db
networks:
- server-network
redis:
image: redis
container_name: cache
command: redis-server --requirepass some_password
restart: always
volumes:
- ./redis-data:/var/lib/redis
ports:
- "6379:6379"
networks:
- server-network
server:
build: .
depends_on:
- database
- redis
environment:
- ENV_VARIABLES=some_env_variables
ports:
- "3000:3000"
volumes:
- .:/usr/app
networks:
- server-network
networks:
server-network:
driver: bridge
最后是项目的文件结构:
project
- src
- test
- .dockerignore
- docker-compose.yml
- Dockerfile
- mongo-init.js
- package-lock.json
- package.json
这个问题的根源是什么以及如何解决?我从 Docker 开始,这是我从事的第一个需要 Docker 的专业项目。
【问题讨论】:
-
你为什么用
RUN chmod -x docker-entrypoint.sh而不是RUN chmod +x ...?你是怎么跑docker-entrypoint.sh的?你在哪里添加或复制它? -
实际上我试过但删除了这个命令,我在其他帖子上读到,当这个问题发生时,这就是解决方案,所以我创建了一个带有
exec npm run dev之类的 docker-entrypoint.sh,只是看看这是否能解决问题,但不,也没有帮助,所以我删除了文件和命令。 @Saeed -
你可以试试
ENTRYPOINT["npm","run","dev"]而不是CMD -
这会导致以下错误@MustafaGüler
starting container process caused: exec: "npm": executable file not found in $PATH: unknown -
在某个时候,您的
docker-compose.yml中有image: node吗?如果你docker rmi node然后重新运行docker-compose up -d --build,是不是更好(Docker会再次拉取上游的node镜像)?
标签: node.js docker docker-compose dockerfile