【问题标题】:Unable to install dependencies with composer inside Docker image无法在 Docker 映像中使用 composer 安装依赖项
【发布时间】:2018-12-03 08:48:39
【问题描述】:

我正在尝试使用 docker 安装参加者。

当我输入这个命令时:

$ docker run --rm -v $(pwd):/app composer/composer install

然后我收到此错误消息。

Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - symfony/class-loader v3.4.8 requires php ^5.5.9|>=7.0.8 -> your PHP version (7.0.7) does not satisfy that requirement.
    - symfony/class-loader v3.4.8 requires php ^5.5.9|>=7.0.8 -> your PHP version (7.0.7) does not satisfy that requirement.
    - Installation request for symfony/class-loader v3.4.8 -> satisfiable by symfony/class-loader[v3.4.8].

这是我的composer.json

{
    "name":"attendize/attendize",
    "description":"A free and open-source event management and ticket selling application.",
    "keywords":[
        "event management",
        "ticket selling",
        "tickets",
        "events"
    ],
    "license":"Attribution Assurance License",
    "type":"project",
    "homepage":"https://www.attendize.com",
    "require":{
        "laravel/framework":"5.2.*",
        "laravelcollective/html":"~5.0",
        "milon/barcode":"dev-master",
        "iron-io/iron_mq":"2.*",
        "intervention/image":"dev-master",
        "nitmedia/wkhtml2pdf":"dev-master",
        "maatwebsite/excel":"~2.0.0",
        "dompdf/dompdf":"dev-master",
        "laravel/socialite":"~2.0",
        "filp/whoops":"~1.0",
        "vinelab/http":"dev-master",
        "mews/purifier":"~2.0",
        "league/flysystem-aws-s3-v3":"~1.0",
        "maxhoffmann/parsedown-laravel":"dev-master",
        "omnipay/common":"~2.3",
        "omnipay/stripe":"*",
        "omnipay/paypal":"*",
        "omnipay/bitpay":"dev-master",
        "omnipay/coinbase":"dev-master",
        "laracasts/utilities":"^2.1",
        "predis/predis":"~1.0",
        "guzzlehttp/guzzle":"^6.2",
        "omnipay/migs":"^2.1",
        "mcamara/laravel-localization":"^1.2",
        "potsky/laravel-localization-helpers":"2.3.*"
    },
    "require-dev":{
        "phpunit/phpunit":"~4.0",
        "phpspec/phpspec":"~2.1",
        "fzaninotto/faker":"^1.5",
        "symfony/dom-crawler":"~3.0",
        "symfony/css-selector":"~3.0",
        "doctrine/dbal":"~2.3",
        "barryvdh/laravel-ide-helper":"^2.1"
    },
    "autoload":{
        "classmap":[
            "database",
            "app/Http/Controllers",
            "app/Models",
            "app/Attendize"
        ],
        "psr-4":{
            "App\\":"app/",
            "Attendize\\":"app/Models"
        }
    },
    "autoload-dev":{
        "classmap":[
            "tests/TestCase.php"
        ]
    },
    "scripts":{
        "post-install-cmd":[
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-update-cmd":[
            "php artisan clear-compiled",
            "php artisan optimize"
        ],
        "post-create-project-cmd":[
            "php -r \"copy('.env.example', '.env');\"",
            "php artisan key:generate"
        ]
    },
    "config":{
        "preferred-install":"dist"
    },
    "extra":{
        "laravel":{
            "dont-discover":[
                "potsky/laravel-localization-helpers"
            ]
        }
    }
}

我不知道是什么问题,因为我是全新的。 请帮我 谢谢。

#docker-composer.yml

version: '2'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile-nginx
    ports:
    - "8080:80"
    networks:
      - attendizenet
    volumes:
      - .:/usr/share/nginx/html/attendize
    depends_on:
      - php
  php:
    build:
      context: .
      dockerfile: Dockerfile-php
    depends_on:
      - db
      - maildev
      - redis
    volumes:
      - .:/usr/share/nginx/html/attendize
    networks: 
      - attendizenet
  php-worker:
    build:
      context: .
      dockerfile: Dockerfile-php
    depends_on:
      - db
      - maildev
      - redis
    volumes:
      - .:/usr/share/nginx/html/attendize
    command: php artisan queue:work --daemon
    networks:
      - attendizenet
  db:
    image: postgres
    environment:
      - POSTGRES_USER=attendize
      - POSTGRES_PASSWORD=attendize
      - POSTGRES_DB=attendize
    ports:
      - "5433:5432"
    volumes:
      - ./docker/pgdata:/var/lib/postgresql/data
    networks:
    - attendizenet
  maildev:
    image: djfarrelly/maildev
    ports:
      - "1080:80"
    networks:
      - attendizenet
  redis:
    image: redis
    networks:
      - attendizenet

networks:
  attendizenet:
    driver: bridge

【问题讨论】:

  • Dockerfile-php 的内容是什么,尤其是包含FROM: 部分的第一行?

标签: php docker composer-php


【解决方案1】:

问题在于您的 Docker 镜像7.0.7 提供的 PHP 版本低于composer.json 中定义的一个或多个依赖项所需的版本。

要解决此问题,您有多种选择:

如果您分享您的Dockerfile,将会很有帮助。

【讨论】:

  • 非常感谢您的好意。但我仍然没有足够的知识来理解你的解决方案。如何使用您的链接提供的基本图像?
  • @user9985718 你能分享你的Dockerfile吗?
  • 我已将 docker-composer.yml 文件的详细信息放入其中。或者这里是所有文件的链接。我现在正在尝试这个。 github.com/Attendize/Attendize 在 aws 上使用 OSX 和 ubunt 10.04。感谢您的支持!!
【解决方案2】:

也许删除和修剪composer/composer 图像和容器就足够了。然后重新构建它。

似乎有更多最新版本的 PHP 7.0.x 可用。仅此一项就可以满足平台依赖性不匹配..

..或者您可以尝试像这样运行install

$ composer install --ignore-platform-reqs
  • 这将忽略不匹配并继续安装。对于development,这可能足够也可能不够。不过,我不建议您忽略production 的要求(除非您真的知道自己在做什么)..

【讨论】:

    猜你喜欢
    • 2018-09-11
    • 2015-09-09
    • 2017-11-15
    • 2020-02-19
    • 2015-01-24
    • 2014-08-23
    • 2017-06-28
    • 1970-01-01
    • 2015-07-14
    相关资源
    最近更新 更多