docker-compose не может найти / запустить start.sh - PullRequest
0 голосов
/ 30 января 2019

Я работаю над установкой docker-compose для моего приложения django / реакции в целях разработки.У меня все работает с 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

Редактировать

Если я изменю commandв docker-compose для 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 голосов
/ 23 мая 2019

Я не уверен, что вы нашли решение для этого, но я думаю, это потому, что вы монтируете том по тому же пути в docker-compose-dev.yml.

Первый Dockerfile скопирует начало.sh файл в / code, но затем docker-compose-dev.yml смонтирует том по тому же пути, перезаписывая / code.Таким образом, удаляем предыдущий скопированный скрипт start.sh.

Попробуйте скопировать start.sh по другому пути.Вы должны настроить свой файл start.sh.

0 голосов
/ 30 января 2019

Вы пытаетесь выполнить /start.sh в корне файловой системы, но ваш рабочий каталог - / code Изменить путь или изменить рабочий каталог Или попробуйте /code/start.sh

0 голосов
/ 30 января 2019

Попробуйте ниже в вашем DockerFile.Проблема в том, что ваш start.sh файл не копируется в каталог code.Поскольку вы уже находитесь в каталоге code и пытаетесь переместить / скопировать start.sh в новый каталог code.

Либо вам не следует использовать /code/start.sh после того, как вы ввели code в качестве своеготекущий каталог или вы должны сделать code вашим текущим каталогом после того, как скопируете все необходимые файлы в этой папке и затем запустите только start.sh.

FROM node:11-alpine

RUN mkdir /code

ADD ./frontend .    

COPY ./docker_compose/node/development/start.sh /code/start.sh

# Make Code your working directory.
WORKDIR /code

RUN npm install

RUN sed -i 's/\r//' start.sh \
    && chmod +x start.sh

Рекомендуется сначала скопировать все ваши файлы, а затем запуститькоманды на эти файлы.RUN npm install всегда должен быть последним шагом после копирования всех ваших файлов в каталог и превращения этого каталога в ваш рабочий каталог.

0 голосов
/ 30 января 2019

Вы хотите запустить /start.sh на вашем композите, вы ищете по полному пути, попробуйте с /code/start.sh.

...