【问题标题】:how to join docker composer php laravel如何加入 docker composer php laravel
【发布时间】:2019-07-29 05:51:45
【问题描述】:

我知道 laradock,但我需要自己完成所有步骤。

我要学习 Laravel,同时最近我为自己打开了 docker :)

现在我需要一起加入:
docker-compose 与图像:
- php:7.2.2-apache
- mariadb
- phpmyadmin/phpmyadmin
- 还有一些作曲家

laravel 将在容器外的主机上。

到目前为止,我已经从 php:7.2.2-apache 图像制作了自己的图像 "web_server" 并在 mod_rewrite 中运行

FROM php:7.2.2-apache

RUN apt update && apt install mc -y && apt install composer -y  
RUN a2enmod rewrite

我的docker-compose.yml 看起来像

version: '3'

services:
  db:
    image: mariadb
    volumes:
      - ./db:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: "secretpswd"
      MYSQL_DATABASE: "test_db"
      MYSQL_USER: "my_user"
      MYSQL_PASSWORD: "secretpswd"
    ports:
      - "3306:3306"

  web:
    image: web_server
    container_name: php_web
    depends_on:
      - db
    volumes:
      - ./www:/var/www/html/
    ports:
      - "80:80"
    stdin_open: true
    tty: true

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: pma
    depends_on:
      - web
      - db
    environment:
     PMA_HOST: "db"
     PMA_PORT: 3306
     PMA_ARBITRARY: 1
    restart: always
    ports:
     - 8080:80
    volumes:
     - ./sessions:/sessions

现在我必须安装 composer ...
我有两个选择

  1. 在本例中使用来自 docker hub 的 composer/composer 图像 不知道 laravel 和 laravel 将如何使用它 因为 laravel 会被单独的web 控制 容器
  2. 在由
    制作的web_server 映像中安装作曲家 php:7.2.2-apache 图片

我已尝试但开始收到错误

以下软件包具有未满足的依赖关系:
作曲家:取决于: php-symfony-console (>= 2.5) 但它不可安装
取决于:php-symfony-filesystem (>= 2.5) 但它不可安装
取决于:php-symfony-finder (>= 2.4),但它不可安装
取决于:php-symfony-process (>= 2.4) 但它不可安装
取决于:php-cli
取决于:php-common 但它不可安装
取决于:php-json-schema,但它不可安装
取决于:php-composer-ca-bundle (>= 1.0) 但它不可安装
取决于:php-composer-ca-bundle ( 取决于:php-composer-semver (>= 1.0) 但它不可安装
取决于:php-composer-semver ( 取决于:php-composer-spdx-licenses (>= 1.0) 但它不可安装
取决于:php-composer-spdx-licenses ( 取决于:jsonlint (>= 1.4) 但不会安装
取决于:jsonlint ( 取决于:php-cli-prompt (>= 1.0) 但它不可安装
取决于:php-cli-prompt ( 取决于:php-psr-log (>= 1.0) 但它不可安装
取决于:php-psr-log ( 推荐:git 但它不会被安装 E:无法纠正问题,你持有损坏的包。命令 '/bin/sh -c apt update && apt install mc -y && apt install composer -y' 返回一个非零代码:100

所以是时候寻求帮助了。

  1. 我应该使用哪种方式?

  2. 在单独composer/composer容器的情况下如何使用 web_server 容器内部以及 laravel 将如何使用它

  3. 如果作曲家安装在php:7.2.2-apache 图像中 如何解决这些错误

【问题讨论】:

    标签: laravel docker docker-compose composer-php


    【解决方案1】:

    我认为最好的选择是为作曲家制作一个单独的 docker 容器。这样您就不会将 composer 与您的 php apache 容器混合在一起。

    您可以将以下行添加到您的 docker-compose 文件中:

    composer:
        restart: 'no'
        container_name:composer
        image: composer:latest
        working_dir: /var/www/html
        command: composer install -d /var/www/html
        volumes:
        - ./www:/var/www/html/
    

    该卷正在 composer 容器和您的 php 容器中同步,因此供应商文件夹也将在两个容器之间同步。

    restart: no 选项在那里,因此当您运行 docker-compose up 时,composer 容器只会启动一次,完成后会停止。

    要运行 composer install 你可以使用:docker-compose run composer composer install

    你也可以使用下一行的命令,这样 composer install 会快一点。

    (关于包的更多信息:https://github.com/hirak/prestissimo

    command: >
          bash -c "composer global require hirak/prestissimo && composer install -d /var/www/html"
    

    【讨论】:

    • 回答。我有 2 个问题:1)需要执行 prestissimo 以从 composer/composer 图像创建我自己的图像吗? 2)如果是单独的作曲家容器,我应该通过哪个容器通过基于composer的容器或通过web_server容器运行laravel命令行工具?例如docker-compose exec CONTAINER_NAME php artisan key:generate
    • 1)。 prestissimo 不需要从你自己的镜像中执行,只要在你运行它的容器上安装了 composer 即可。 2)。所有 laravel 命令(key:generate)仍然可以从 web_server 容器运行。
    • 感谢您的回答。我没有启动 composer 容器。发生在我的理解之外:) 所以我改变了docker-compose.yml,当我第一次运行它时Creating composer ... done,之后我没有启动composer 容器。然后我第二次运行docker-compose 并收到Starting composer ... done 但仍然没有容器启动作曲家...... smth 是错误的,或者我只是不知道如何使用那个容器?
    • 好的,我重读了 docker hub 上的 composer/composer 描述,并创建了使用 composer 映像的单独 sh 脚本……但这在某种程度上破坏了容器的概念,对吧?为了保持主机没有任何安装,同样的成功,我可以将作曲家本地安装到主机......
    • docker-compose up -d
    猜你喜欢
    • 2018-08-19
    • 2020-11-04
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2021-08-15
    • 2018-12-02
    相关资源
    最近更新 更多