Laradock php mysql 安装多版本

安装 php 多版本

第一步复制 php-fpm 放到 php-fpm 的下面,修改如下

## php-fpm 7.0 
php-fpm70:      # 修改名字为 php-fpm70
  build:
    context: ./php-fpm
    args:
      # ...
      - LARADOCK_PHP_VERSION=7.0    # 直接写死版本号,或者 .env再加一个变量
      # ...
  volumes:
    # ...
    - ./php-fpm/php7.0.ini:/usr/local/etc/php/php.ini   # 使用 7.0 的配置文件
    # ...

第二步修改 site 配置文件

  • 方法一,修改站点配置文件
fastcgi_pass php-upstream;
替换为
fastcgi_pass php-fpm70:9000;
  • 方法二
nginx Dockerfile 文件修改
在这句下面
ARG PHP_UPSTREAM_CONTAINER=php-fpm
增加 php-fpm70 的变量
ARG PHP70_UPSTREAM_CONTAINER=php-fpm70
在这句下面
# Set upstream conf and remove the default conf
RUN echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf \
    && rm /etc/nginx/conf.d/default.conf
增加 php-fpm70
# 写入 php-fpm70
RUN echo "upstream php70-upstream { server ${PHP70_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" >> /etc/nginx/conf.d/upstream.conf
然后将站点配置文件修改为
fastcgi_pass php-upstream;
替换为
fastcgi_pass php70-upstream;

第三步,自动跟随启动

docker-compose  nginx 模块
depends_on:
    - php-fpm
    - php-fpm70     # 增加 php-fpm70

安装 mysql 多版本

这里假设 latest 对应的是 8.0,现在要安装 5.7

复制 docker-compose.yml 中 mysql 容器代码放到 mysql 的下面,修改如下

### MySQL5.7 ################################################
    mysql57:        # 容器名字就叫 mysql57
      build:
        context: ./mysql
        args:
          - MYSQL_VERSION=5.7       # 这里直接写死版本号
      environment:
        - MYSQL_DATABASE=${MYSQL_DATABASE}
        - MYSQL_USER=${MYSQL_USER}
        - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
        - TZ=${WORKSPACE_TIMEZONE}
      volumes:
        - ${DATA_PATH_HOST}/mysql57:/var/lib/mysql      # 这里要把mysql 数据目录改一下名字,改为mysql57,否则会和默认版本冲突提示无法写入文件
        - ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
      ports:
        - "3307:3307"   # 这里将端口映射到主机 3307 端口,并且内部也是用 3307(这样本地和程序中都使用同一个 3307 端口), 本地端口:容器端口
      networks:
        - backend

启动

docker-compose up -d mysql57

可以将 mysql57 添加为 mysql 的依赖项,这样当启动 mysql 时,也会自动把 mysql57 启动

在 mysql 模块的 ports 下面追加

    depends_on:
        - mysql57

这样如下命令,将同时启动 mysql 和 mysql57

docker-compose up -d mysql
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 13

按照这个配置出现nginx启动不了:

file

2年前 评论
Wsmallnews (楼主) 2年前
Vicoo (作者) 2年前
Wsmallnews (楼主) 2年前
Vicoo (作者) 2年前
Wsmallnews (楼主) 2年前
Vicoo (作者) 2年前

不应该是"3307:3306"吗?

2年前 评论
Wsmallnews (楼主) 2年前
..
ports:
        - "${PHP_FPM_XDEBUG_PORT}:9003"
...

是不是需要把的ports改下

...
ports:
        - "9004:9004"
...

要不然会报错

Error response from daemon: driver failed programming external connectivity on endpoint laradock-php-fpm-80-1 (5b4bba072d557ea5feaa0a9c9c8a0acd39e0ee69436bcfea2b70b5458bfbad97): Bind for 0.0.0.0:9003 failed: port is already allocated
2年前 评论
Wsmallnews (楼主) 2年前

file 感觉没写错 但还是有跟一楼一样 nginx启动不了

file

1年前 评论
Wsmallnews (楼主) 1年前

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