Тома Docker для приложения Golang - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь запустить приложение Golang в режиме разработки из Docker

Dockerfile

FROM golang 
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN go get -d -v .
RUN go build -o main . 
CMD ["./main"]

docker-compose.yml

version: "3.3"

services:
  database:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    ports:
      - 6060:5432

  api:
    build: ./demoapp-api
    volumes:
      - ./demoapp-api:/usr/src/app
    ports:
      - 5000:5000
    depends_on:
      - database

Структура файла выглядит следующим образом:

enter image description here

При запуске сборки я получаю эту ошибку ( полный журнал ):

Recreating f97ae865ad6d_demoapp_api_1_6f198d4b1db4 ... error

ERROR: for f97ae865ad6d_demoapp_api_1_6f198d4b1db4  Cannot start service api: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"./main\": stat ./main: no such file or directory": unknown

ERROR: for api  Cannot start service api: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"./main\": stat ./main:no such file or directory": unknown
ERROR: Encountered errors while bringing up the project.

Внутри файла контейнера ./main существует

MBP-Pavel:demoapp pavel$ docker run --rm -it 4ae6ff9cf413 sh
# pwd
/usr/src/app
# ls
Dockerfile  main  main.go
#

Если удалить службу volumes из api, все в порядке, но мне нужно полностью восстановить моюприложение (с загрузкой зависимостей).Что я делаю не так?

1 Ответ

0 голосов
/ 16 декабря 2018

При запуске контейнера через docker-compose папка demoapp-api монтируется поверх /usr/src/app внутри контейнера, а приложение go находится в той же папке в контейнере.Поскольку demoapp-api не содержит основной двоичный файл, докер не может найти и выполнить его.

Вам необходимо скомпилировать ваш основной .go локально в папке demoapi-app и затем запустить docker-compose up.

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