Docker запуск работает только после сборки - PullRequest
1 голос
/ 18 июня 2020

Я могу построить и запустить контейнер с

docker build -t hopperweb:v5-full -f Dockerfile . && 
docker run -p 127.0.0.1:3000:8080 --rm -ti hopperweb:v5-full

Однако, когда я запускаю контейнер, я получаю эту ошибку: standard_init_linux.go:211: exec user process caused "exec format error"

docker run -p 127.0.0.1:3000:8080 --rm -ti hopperweb:v5-full

Почему он работает, когда он запускается после && ??

Я могу запустить образ с bash: docker run -p 127.0.0.1:3000:8080 --rm -ti hopperweb:v5-full bash без проблем.

Это мой DockerFile

FROM ubuntu:18.04

RUN apt-get update
RUN apt-get install --yes curl
RUN apt-get install --yes sudo  ## maybe not necessary, but helpful
RUN apt-get install --yes gnupg
RUN apt-get install --yes git   ## not necessary, but helpful
RUN apt-get install --yes vim   ## not necessary, but helpful

## INSTALL NPM
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo 'deb https://dl.yarnpkg.com/debian/ stable main' | sudo tee /etc/apt/sources.list.d/yarn.list

RUN apt-get update
RUN apt-get install --yes yarn
RUN apt-get install --yes npm

## COPY IN APP FILES
RUN mkdir /app
COPY hopperweb/ /app/hopperweb/

RUN chmod +x /app/hopperweb/start.sh
RUN /app/hopperweb/start.sh

Содержимое start.sh:

#!/bin/bash

cd /app/hopperweb/
yarn start

1 Ответ

1 голос
/ 18 июня 2020

В вашей первой команде docker run никогда не выполняется, поскольку последняя команда (start.sh) выполняется во время сборки и никогда не завершится. Итак, вы все еще выполняли docker build.

Измените следующую строку

RUN /app/hopperweb/start.sh

на

CMD /app/hopperweb/start.sh

Не путайте RUN с CMD. RUN фактически запускает команду и фиксирует результат; CMD ничего не выполняет во время сборки, но указывает команду, предназначенную для образа.

См .: https://docs.docker.com/engine/reference/builder/#cmd

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...