Как я могу запустить веб-приложение flutter с помощью Docker?

#docker #flutter #docker-compose #flutter-web

#docker #flutter #docker-compose #flutter-web

Вопрос:

Я реализовал свое первое (запущенное) веб-приложение с использованием Flutter, и теперь я хотел бы развернуть его с помощью Docker (что для меня довольно ново) для его запуска.

Моя структура папок выглядит следующим образом: ${workdir}/Dockerfile , ${workdir}/docker-compose.yaml и ${workdir}/myprog где последняя является моим каталогом проекта Intellij, таким образом, содержащим pubspec.yaml -file . Последнее совпадает с демонстрационным файлом.

Dockerfile заключается в следующем:

 FROM ubuntu:20.04

# Prerequisites
RUN apt-get update amp;amp; apt-get install -y unzip xz-utils git openssh-client curl amp;amp; apt-get upgrade -y amp;amp; rm -rf /var/cache/apt

# Install flutter beta
RUN curl -L https://storage.googleapis.com/flutter_infra/releases/beta/linux/flutter_linux_1.22.0-12.1.pre-beta.tar.xz | tar -C /opt -xJ

ENV PATH "$PATH:/opt/flutter/bin"

# Enable web capabilities
RUN flutter config --enable-web
RUN flutter upgrade
RUN flutter pub global activate webdev
RUN flutter doctor

# Initialize web-app
WORKDIR /opt/web

# Copy it into docker container
COPY ./myprog/ ./
  

и docker-compose.yaml файл

 version: '3.1'
services:
  webapp:
    container_name: myprog
    restart: always
    image: myprog
    ports:
      - 5001:5001 
    build:
      context: ./
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: ["flutter", "pub", "global", "run", "webdev", "serve", "0.0.0.0:5001"]
  

Я успешно создаю его с помощью docker-compose -f docker-compose.yaml build , но запуск его с помощью docker-compose -f docker-compose.yaml up завершается ошибкой со следующим сообщением об ошибке

 myprog    | webdev could not run for this project.
myprog    | Could not find a file named "pubspec.yaml" in "/opt/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_keyboard_visibility-3.2.2".
myprog    | pub finished with exit code 78
  

Полный путь к pubspec.yaml /opt/web/pubspec.yaml . Как я могу исправить эту проблему?

Комментарии:

1. Все предложения, касающиеся лучших практик, также приветствуются. Спасибо

Ответ №1:

Я думаю, вы забыли установить пакеты зависимостей в свой файл docker. Из каталога проекта Flutter (содержащего pubspec.yaml) вам необходимо

 RUN flutter pub get
  

перед сборкой приложения.

Также я думаю, вам следует запустить правильную команду сборки для web. Ссылка на руководство (https://flutter.dev/docs/get-started/web ) вы должны

 RUN flutter build web
  

Комментарии:

1. Вы правы, я думал, что запуск webdev запустит сборку. После исправления этого я столкнулся с дальнейшими проблемами, в конце концов я использовал dhttpd в качестве веб-сервера, и все работает гладко.