使用构建好的 Docker 镜像来搭建 Laravel Sail 开发环境,解决 Laravel Sail 镜像构建失败的问题

背景

最近有很多小伙伴给我留言,说按照教程《将 Laravel 开发环境由 Homestead 迁移到 Laravel Sail ( Docker ) 完整详细教程
搭建 Laravel Sail 开发环境时总是构建镜像失败。其实构建镜像失败的主要原因就是国内的网络问题,这给刚学习 Laravel Sail 开发环境搭建的小白带来了“巨大的”挑战,所以我将本地构建好的 Sail 镜像共享到了百度网盘上,大家直接从百度网盘下载构建好的 Laravel Sail 镜像导入 Docker Desktop 里面,然后从导入的镜像来构建开发环境就可以了。当然,为了下载速度快一些,你可能要给百度网盘充点钱钱。:blush:

镜像地址

链接:pan.baidu.com/s/1FKXRZWZYhPjnY2mwX...
提取码:b7br
镜像列表:

  • sail-7.4.tar (适用于基于 php7.4 开发的项目)
  • sail-8.0.tar (适用于基于 php8.0 开发的项目)
  • sail-8.0-octane.tar (适用于基于 php8.0 开发且由 laravel octane 驱动的项目)
  • sail-8.1 (适用于基于php8.1开发的项目)
  • mysql-8.0
  • redis

基础环境准备

  • 开启 wsl2
  • 安装 Ubuntu 子系统
  • 安装 Docker Desktop 并让 Docker Desktop 基于 wsl2 来运行

搭建步骤

安装 Laravel Sail

请参照《将 Laravel 开发环境由 Homestead 迁移到 Laravel Sail ( Docker ) 完整详细教程》 发布 Dockerfile 以便定制这一步骤之前的步骤。因为我们使用从百度网盘下载的镜像来构建开发环境,所以不需要我们重新定制 Dockerfile 来构建镜像了。

下载并导入 Laravel Sail 镜像

从上面我分享的镜像中,选择你需要的镜像下载到本地电脑。这里假设我需要的是 sail-8.0.tar,我的镜像下载到了/mnt/c/sail-8.0.tar这个路径里面。
首先导入镜像:

$ docker load < /mnt/c/sail-8.0.tar

查看导入的镜像:

$ docker image ls

运行结果如下:

使用构建好的 Docker 镜像来搭建 Laravel Sail 开发环境,解决 Laravel Sail 镜像构建失败的问题

给镜像命名:

由于我导出镜像的时候用的镜像ID,所以导入镜像的 REPOSITORY 和 TAG 都为空值,这是我当时的失误,所以加上这一步。

$  docker tag e4bd20deb92f sail-8.0/app:latest

运行 docker image ls就可以看到导入的镜像了。

编辑 docker-compose.yml 文件,编排镜像。

将你的服务配置中的build选项删除,因为我们已经导入了镜像,不需要构建了。编辑后的配置文件如下:

# For more information: https://learnku.com/docs/laravel/sail
version: '3'
services:
    your-service.test:
        image: sail-8.0/app
        extra_hosts:
            - 'host.docker.internal:host-gateway'
        ports:
            - '${APP_PORT:-80}:80'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
        volumes:
            - '.:/var/www/html'
        networks:
            - sail
        depends_on:
            - mysql
            - redis
    mysql:
        image: 'mysql:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - 'sailmysql:/var/lib/mysql'
        networks:
            - sail
        healthcheck:
            test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
            retries: 3
            timeout: 5s
    redis:
        image: 'redis:alpine'
        ports:
            - '${FORWARD_REDIS_PORT:-6379}:6379'
        volumes:
            - 'sailredis:/data'
        networks:
            - sail
        healthcheck:
            test: ["CMD", "redis-cli", "ping"]
            retries: 3
            timeout: 5s
networks:
    sail:
        driver: bridge
volumes:
    sailmysql:
        driver: local
    sailredis:
        driver: local

启动服务

./vendor/bin/sail up

后续步骤

后续步骤请查看《将 Laravel 开发环境由 Homestead 迁移到 Laravel Sail ( Docker ) 完整详细教程》构建镜像并启动容器及后续章节。

其他

本作品采用《CC 协议》,转载必须注明作者和本文链接
顺势而为
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 24
playmaker
4年前 评论
Image myhui0926 (楼主) 4年前

直接在dockerfile里RUN apt update 之前加上

RUN  sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN  sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list

RUN  apt-get clean

file

4年前 评论
Image myhui0926 (楼主) 4年前
Image lun1bz (作者) 4年前
Image myhui0926 (楼主) 4年前

file那位高人指点指点,这是怎么回事?

4年前 评论
Image myhui0926 (楼主) 4年前

Ubuntu 安装以后 sudo ufw status ? 443 能开启吗?

4年前 评论
Image myhui0926 (楼主) 4年前
Image Oyxiaoxi (作者) 4年前

file

# For more information: https://learnku.com/docs/laravel/sail
version: '3'
services:
    your-service.test:
        image: sail-8.0/app
        extra_hosts:
            - 'host.docker.internal:host-gateway'
        ports:
            - '${APP_PORT:-80}:8088'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
        volumes:
            - '.:/var/www/html'
        networks:
            - sail
        depends_on:
            - mysql
            - redis
    mysql:
        image: 'mysql:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:33060'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - 'sailmysql:/var/lib/mysql'
        networks:
            - sail
        healthcheck:
            test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
            retries: 3
            timeout: 5s
    redis:
        image: 'redis:alpine'
        ports:
            - '${FORWARD_REDIS_PORT:-6379}:6379'
        volumes:
            - 'sailredis:/data'
        networks:
            - sail
        healthcheck:
            test: ["CMD", "redis-cli", "ping"]
            retries: 3
            timeout: 5s
networks:
    sail:
        driver: bridge
volumes:
    sailmysql:
        driver: local
    sailredis:
        driver: local
4年前 评论
Image myhui0926 (楼主) 4年前

我是卡在了sail up 这一步了, 换源也不好使,对ubuntu不是很了解,发现个问题。
看论坛的教程执行

curl -s https://laravel.build/example-app | bash

这个产生的Dockerfile文件里面都是

FROM ubuntu:21.04

但我是win10系统用wsl2,unbuntu20.04
我观察sail up的过程 请求的地址也是类似

http://archive.ubuntu.com/ubuntu hirsute/main amd64

这样是不是不合适啊。

4年前 评论
Image myhui0926 (楼主) 4年前

docker load < /mnt/c/sail-7.4.tar 之后显示

REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
<none>       <none>    5357091b6f9e   7 months ago   706MB

怎么解决

4年前 评论
Image myhui0926 (楼主) 4年前
Image myhui0926 (楼主) 4年前
Image dollzcx (作者) 4年前
Image myhui0926 (楼主) 4年前

是sail 里自带了nginx 还是说是用的laravel 自己的serve ,我也是昨天晚上装好的.单纯好奇

4年前 评论
Image myhui0926 (楼主) 4年前
Image talers69 3年前

./vendor/bin/sail up一直报这个错误

ERROR: Invalid interpolation format for "ports" option in service "laravel.test": "${APP_PORT:-80}:8088"
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!