Docker & WSL Ubuntu в Windows не может найти docker-entrypoint.sh - файл не найден - PullRequest
0 голосов
/ 26 апреля 2019

После успешной настройки Docker и WSL (Ubuntu 18.04) в Windows я могу успешно запустить Docker и создавать образы из WSL. Я следил за прекрасной статьей Ника Джанетакиса здесь

Однако, когда я запускаю контейнер, я получаю эту ошибку:

Ошибка ответа от демона: Ошибка создания среды выполнения OCI: container_linux.go: 344: запуск процесса контейнера вызвал "exec: \" / bin / docker-entrypoint.sh \ ": stat /bin/docker-entrypoint.sh: нет такой файл или каталог ": unknown

Контейнеры Dockerfile это:

FROM ruby:2.4-alpine

RUN apk update && apk add build-base postgresql postgresql-dev git less make

RUN mkdir /app
WORKDIR /app
COPY Gemfile Gemfile.lock ./

RUN bundle install

# Clean up
RUN apk del build-base

COPY . /app/

EXPOSE 2999
EXPOSE 3000

ENTRYPOINT ["bin/docker-entrypoint.sh"]

Таким образом, он не может найти файл точки входа, даже если он находится внутри / bin в WSL.

Насколько я могу судить, это не проблема Windows / Unix CR / LF, о которой сообщалось в других блогах / вопросах.

Итак, как я могу заставить этот dockerfile 'видеть' файл точки входа, который находится в WSL (т. Е. Он находится в контейнере в WSL)?

Примечание

Если я изменю последнюю строку на ENTRYPOINT ["echo", "Hello"], то она запускается, но, очевидно, не вызывает сценарий точки входа. Я пытаюсь понять, почему он не может найти этот сценарий, поскольку он там есть.

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Вот как ты Dockerfile должен выглядеть:

FROM ruby:2.4-alpine                                                                                                                                                                          

RUN apk update && apk add build-base postgresql postgresql-dev git less make                                                                                                                  

RUN mkdir /app                                                                                                                                                                                
WORKDIR /app                                                                                                                                                                                  
COPY Gemfile .                                                                                                                                                                  
COPY Gemfile.lock .

RUN bundle install                                                                                                                                                                            

# Clean up                                                                                                                                                                                    
RUN apk del build-base                                                                                                                                                                        

COPY . /app/                                                                                                                                                                                  

EXPOSE 2999                                                                                                                                                                                   
EXPOSE 3000                                                                                                                                                                                   

ENTRYPOINT ["/app/bin/docker-entrypoint.sh"] 

Точка находится в последней строке. Вы должны использовать абсолютный путь как /app/bin/docker-entrypoint.sh

Обновлено

Вот пример docker-entrypoint.sh:

#!/bin/ash

exec "${@}"

и вот "целая" структура файлов:

.
├── bin
│   └── docker-entrypoint.sh
├── Dockerfile
├── Gemfile
└── Gemfile.lock
0 голосов
/ 26 апреля 2019

Проблема заключалась в том, что диск монтирования docker-compose больше не был доступен.

Это потому, что я сбросил свой пароль Windows ранее на этой неделе, что привело к потере Docker Desktop / Windows Shared Drive.

Поскольку мы используем docker-compose для монтирования тома для приложения, оно больше не может видеть его, так как общий диск больше не включен в Docker Dekstop.

Это: https://github.com/Microsoft/WSL/issues/1854#issuecomment-387778063

Из файла docker-compose: апи: построить: команда: puma -C config / puma.rb объемы: -.: / app

С точки зрения docker-compose этот том в основном пустой, поэтому ошибка файла не найдена.

...