docker-compose找不到/运行start.sh

时间:2019-01-30 16:47:41

标签: node.js docker docker-compose

出于开发目的,我正在为我的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甚至还没有出现?

4 个答案:

答案 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文件。