无法在 Docker 中颤动 运行
Cannot get flutter running in Docker
我的 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
在 flutter
包的 ./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.
- 拆分包以在多行上安装,因为这样更容易
看看
diff
imo 有什么变化。
- 合并
curl | tar
.
- 删除了
ls /srv/api/flutter
和 chmod a+x /srv/api/flutter
RUN
的。
我的 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
在 flutter
包的 ./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
andADD
create layers).- 合并了
apt-get update && apt-get install -y ...
并删除了apt-get upgrade
原因在 这 documentation. - 拆分包以在多行上安装,因为这样更容易
看看
diff
imo 有什么变化。 - 合并
curl | tar
. - 删除了
ls /srv/api/flutter
和chmod a+x /srv/api/flutter
RUN
的。