出于开发目的,我正在为我的django / react应用程序进行docker-compose设置。我已经使用Django Dockerfile进行了所有工作,但是使用React我一直在努力使其运行我的start.sh
。似乎找不到它。
错误:
ERROR: for node_server Cannot start service node: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"/start.sh\": stat /start.sh: no such file or directory": unknown
compose.parallel.parallel_execute_iter: Failed: <Service: node>
compose.parallel.feed_queue: Pending: set()
ERROR: for node Cannot start service node: OCI runtime create failed: container_linux.go:344: starting container process caused "exec: \"/start.sh\": stat /start.sh: no such file or directory": unknown
ERROR: compose.cli.main.main: Encountered errors while bringing up the project.
节点Dockerfile:
FROM node:11-alpine
RUN mkdir /code
WORKDIR /code
ADD ./frontend .
RUN npm install
COPY ./docker_compose/node/development/start.sh /code/start.sh
RUN sed -i 's/\r//' start.sh \
&& chmod +x start.sh
完整的docker-compose-dev.yml:
version: '3'
services:
postgres:
container_name: postgres_server
image: postgres:11-alpine
env_file: .env
ports:
- 5432:5432
volumes:
- local_postgres_data_dev:/var/lib/postgresql/data
- local_postgres_backup_dev:/backups
node:
container_name: node_server
build:
context: .
dockerfile: ./docker_compose/node/development/Dockerfile
command: /start.sh
volumes:
- .:/code
ports:
- "3000:3000"
django:
container_name: django_server
build:
context: .
dockerfile: ./docker_compose/django/development/Dockerfile
depends_on:
- postgres
- node
volumes:
- .:/code
env_file: .env
ports:
- "8000:8000"
command: /start.sh
volumes:
local_postgres_data_dev: {}
local_postgres_backup_dev: {}
start.sh:
#!/bin/ash
npm start
项目结构:
.
├── api
├── financeApp
├── config
├── datadumps
├── docker-compose-dev.yml
├── docker-compose.yml
├── docker_compose
├── frontend (this is my react app)
├── manage.py
├── requirements
└── templates
修改
如果我在docker-compose中将command
更改为command: ls
,则返回以下内容:
node_server | api
node_server | financeApp
node_server | config
node_server | datadumps
node_server | docker-compose-dev.yml
node_server | docker-compose.yml
node_server | docker_compose
node_server | frontend
node_server | manage.py
node_server | requirements
node_server | templates
所以看来start.sh
甚至还没有出现?
答案 0 :(得分:0)
您要在撰写文件上运行/start.sh
,正在按完整路径搜索,请尝试使用/code/start.sh
。
答案 1 :(得分:0)
您尝试在文件系统的根目录中执行/start.sh,但您的工作目录为/ code 更改路径或更改工作目录 或者尝试/code/start.sh
答案 2 :(得分:0)
在DockerFile中尝试以下内容。问题是您的start.sh
文件没有被复制到code
目录下。因为您已经在code
目录中,并且正在尝试在新的start.sh
目录下移动/复制code
。
在将/code/start.sh
设置为当前目录后,您不应该使用code
,或者在复制该文件夹中的所有必需文件然后运行{仅{1}}。
code
最佳做法是先复制所有文件,然后在这些文件上运行命令。将所有文件复制到该目录并将该目录作为您的工作目录后,start.sh
应该始终是最后一步。
答案 3 :(得分:0)
我不确定您是否已找到解决方案,但是,我认为这是因为您正在docker-compose-dev.yml中的同一路径上装载卷。
第一个Dockerfile将复制/ code中的start.sh文件 但随后docker-compose-dev.yml将在覆盖/ code的同一路径上装载卷。因此,删除先前复制的start.sh脚本。
在其他路径中尝试COPY start.sh。您必须调整start.sh文件。