【问题标题】:Cannot get flutter running in Docker无法在 Docker 中运行颤振
【发布时间】:2020-01-04 22:49:22
【问题描述】:

我的 Dockerfile

FROM ubuntu:18.04

# Project files
ARG PROJECT_DIR=/srv/api
RUN mkdir -p $PROJECT_DIR

WORKDIR $PROJECT_DIR


# Update
RUN apt-get -y upgrade
RUN apt-get update

RUN apt-get install -y xz-utils
RUN apt-get install -y curl
RUN curl https://storage.googleapis.com/flutter_infra/releases/stable/linux/flutter_linux_v1.7.8+hotfix.4-stable.tar.xz -o /flutter.tar.xz
RUN tar xf /flutter.tar.xz 
#RUN mv flutter /srv/api/flutter
RUN ls /srv/api/flutter
RUN chmod a+x /srv/api/flutter
RUN flutter doctor

# Install Flutter dependencies
RUN flutter upgrade
RUN flutter packages pub global activate webdev
RUN flutter packages upgrade


# Copy everything to Docker
COPY ./ ./

RUN flutter doctor 失败

如果我输入路径/srv/api/flutter,我会收到错误flutter: not found。 如果我输入路径/usr/local/bin/flutter,我会收到错误flutter: Permission Denied

我尝试将它放在常规目录和 /usr 目录中。两种方式都失败了。我尝试搜索它,但似乎没有任何效果。

我该如何解决?

【问题讨论】:

  • flutter: Permission Denied 错误与试图执行一个目录有关,该命令在flutter_linux_v1.7.8+hotfix.4-stable.tar.xz 包的./bin/ 目录中可用(例如将是/usr/local/bin/flutter/bin/flutter)。
  • 嘿@masseyb,这不正确。在 tar'ing Flutter.tar.xz 之后,它将有颤振文件夹。在flutter 文件夹中,将有/bin 文件夹所在的flutter。我在 Docker 中使用ls 检查每一步,作为我自己的惯例,不要搞砸哈哈

标签: docker flutter ubuntu-18.04 chmod


【解决方案1】:

flutterflutter 包的./bin/ 目录中可用。稍作修改Dockerfile

FROM ubuntu:18.04

ARG PROJECT_DIR=/srv/api
ENV PATH=/opt/flutter/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

RUN apt-get update && \
    apt-get install -y \
        xz-utils \
        git \
        openssh-client \
        curl && \
    rm -rf /var/cache/apt

RUN curl -L https://storage.googleapis.com/flutter_infra/releases/stable/linux/flutter_linux_v1.7.8+hotfix.4-stable.tar.xz | tar -C /opt -xJ

WORKDIR ${PROJECT_DIR}
COPY ./ ./

RUN flutter doctor
RUN flutter upgrade
RUN flutter packages pub global activate webdev
RUN flutter packages upgrade

此示例将flutter 包提取到/opt 并在$PATH 中设置/opt/flutter/bin - flutter 可执行文件位于/opt/flutter/bin/flutter

注意

  • WORKDIR 如果目录不存在,则创建该目录 - 删除RUN mkdir -p $PROJECT_DIR 会从 最终图像 (RUN, COPY and ADD create layers)。
  • 合并 apt-get update && apt-get install -y ... 并删除 apt-get upgrade 原因在 这 documentation
  • 将软件包拆分为多行安装,因为这样更容易安装 看看diffimo 有什么变化。
  • 结合curl | tar
  • 删除了ls /srv/api/flutterchmod a+x /srv/api/flutter RUN的。

【讨论】:

  • 复制粘贴——成功了!你能解释一下你的代码吗?因为我也很想了解更多关于 docker 的初始化。例如,为什么我们需要提供ENV PATH,为什么 opt 如此特别(我看到很多 Flutter 的人使用这个路径),为什么 WORKDIR 在最后初始化 vs 在开始?
  • @zeromaro /opt is reserved for all the software and add-on packages that are not part of the default installation. ENV 是设置$PATH 其中bash 将查找命令(1.4.1.7. Executing commands)。 WORKDIR 设置是偏好设置,我在需要时设置它,它让我更清楚地看到发生了什么。
  • 很棒的评论,非常感谢您的努力!非常感谢
猜你喜欢
  • 2020-02-12
  • 2019-05-03
  • 2021-12-18
  • 2020-04-28
  • 2020-03-12
  • 1970-01-01
  • 2021-04-17
  • 2020-04-27
  • 2020-03-22
相关资源
最近更新 更多