Docker запускает <image>всегда с ошибками в standard_init_linux.go: 207: пользовательский процесс exec вызвал "нет такого файла или каталога" в Windows - PullRequest
2 голосов
/ 04 июля 2019

Я пытался сделать docker-compose up из моего Dockerfile, но это не удалось с ошибкой standard_init_linux.go:207: exec user process caused "no such file or directory"

Я уже попробовал все, включая переустановку докера, но, похоже, он не работает.

докер-compose.yml:

version: "3"

volumes:
  postgres_data:
    driver: local
  bundle_cache:
    driver: local

services:
  postgres:
    image: postgres:11
    volumes:
      - postgres_data:/var/lib/postgresql/data
    logging:
      driver: "none"
    ports:
      - "${POSTGRES_PORT}:5432"

  web-tracking:
    build:
      context: .
    tty: true
    stdin_open: true
    env_file:
      - ./.env
    depends_on:
      - postgres
    links:
      - postgres
    ports:
      - "${RAILS_PORT}:3000"
    volumes:
      - ./:/app:delegated
      - bundle_cache:/bundle

Dockerfile:

FROM ruby:2.6.3

EXPOSE 3000
WORKDIR ./app

RUN \
  apt-get update -qq && \
  apt-get install -y --no-install-recommends \
  nodejs \
  postgresql-client

ENV BUNDLE_PATH=/bundle \
  BUNDLE_BIN=/bundle/bin \
  GEM_HOME=/bundle
ENV PATH="${BUNDLE_BIN}:${PATH}"

COPY docker-entry.sh .

ENTRYPOINT ["/app/docker-entry.sh"]
CMD ["rails", "server", "-b", "0.0.0.0"]

docker-entry.sh

#!/bin/sh
set -e

# if the server was not shut down properly the pid file will need to be removed
if [ -f tmp/pids/server.pid ]; then
  rm tmp/pids/server.pid
fi
bundle install
bundle exec "$@"

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Я без проблем запускаю ваш стек в Ubuntu 16.04.Если вы работаете в Windows, возможно, вам нужно использовать dos2unix для запуска сценария docker-entry.sh (https://forums.docker.com/t/standard-init-linux-go-175-exec-user-process-caused-no-such-file/20025)

Когда я начинал с docker, я пытался использовать docker-compose в первый раз. Итак,Я понял, что мне очень трудно учить docker и docker-compose вместе, потому что вы потеряли в беспорядке команды и конфига. Для начала я рекомендую вам попробовать использовать только Dockerfile и соединить «postgres» и «Контейнер веб-слежения с докерской сетью, называемый «пользовательские мосты» (https://docs.docker.com/network/bridge/);

0 голосов
/ 04 июля 2019

Основная причина - docker-entry.sh, вы устанавливаете этот файл в Windows.В Windows прерыватель строки - \r\n, в то время как вы наконец запускаете его в контейнере linux, прерыватель строки - \n.

Таким образом, вы должны ввести что-то вроде git-bash, затем выполните dos2unix docker-entry.sh, чтобыизмените формат, пересоберите и перезапустите его, все будет в порядке.

Другое решение - это установить dos2unix при сборке и измените формат в Dockerfile, как в следующем (вам также может понадобиться изменить его разрешение):

FROM ruby:2.6.3

EXPOSE 3000
WORKDIR ./app

RUN \
  apt-get update -qq && \
  apt-get install -y --no-install-recommends \
  nodejs \
  postgresql-client \
  dos2unix

ENV BUNDLE_PATH=/bundle \
  BUNDLE_BIN=/bundle/bin \
  GEM_HOME=/bundle
ENV PATH="${BUNDLE_BIN}:${PATH}"

COPY docker-entry.sh .
RUN dos2unix ./docker-entry.sh && chmod 777 ./docker-entry.sh

ENTRYPOINT ["/app/docker-entry.sh"]
CMD ["rails", "server", "-b", "0.0.0.0"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...