【问题标题】:Docker + PHP + RabbitMQDocker + PHP + RabbitMQ
【发布时间】:2020-03-17 21:08:11
【问题描述】:

我正在尝试在 Docker 容器中运行一个 php 程序,以侦听来自 RabbitMQ 的数据。

这是我到目前为止所做的:

  • 使用 composer:1.9.3, php:7.4.3-cli 进行多阶段构建
  • 已安装 phpAmqpLib/php-amqplib

当我运行程序时,我得到“警告:需要(./vendor/autoload.php):无法打开流:第 3 行的 /usr/src/myapp/test.php 中没有这样的文件或目录”

我运行了“composer install”,但仍然出现错误,请尽可能提供帮助。

# PHP dependency manager
FROM composer:1.9.3 AS composer

FROM php:7.4.3-cli

# Copies dependency manager into PHP image
COPY --from=composer /usr/bin/composer /usr/local/bin/composer

# Install RabbitMQ PHP client
RUN apt-get -qq update && apt-get -qq -y install \
    git \
    libzip-dev \
    unzip \
    && docker-php-ext-install \
       sockets \
       zip \
    && composer require php-amqplib/php-amqplib \

    && composer install
# Copies files from a source directory into the containers filesystem
COPY . /usr/src/myapp
CMD ["php", "/usr/src/myapp/test.php"]

test.php

<?php
require 'vendor/autoload.php';

use PhpAmqpLib\Connection\AMQPStreamConnection;

$connection = new AMQPStreamConnection('messaging', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('hello', false, false, false, false);

echo " [*] Waiting for messages. To exit press CTRL+C\n";

$callback = function ($msg) {
    echo ' [x] Received ', $msg->body, "\n";
};

$channel->basic_consume('hello', '', false, true, false, false, $callback);

while ($channel->is_consuming()) {
    $channel->wait();
}

$channel->close();
$connection->close();

编辑:test.php 的第 1 行以前使用 require_once __DIR__ . '/vendor/autoload.php'; 并指向当前目录,而实际上 vendor 已安装在根目录中。

【问题讨论】:

  • docker run -it yourimage:yourtag /bin/bash 应该让你进入一个 shell,你可以在其中检查容器的文件系统,运行测试命令,你有什么。
  • 请提供一些关于您的 PHP 应用程序外观的信息。
  • 谢谢@Sammitch,你帮我指明了正确的方向。

标签: php docker rabbitmq


【解决方案1】:

test.php 的第 1 行以前使用 require_once __DIR__ . '/vendor/autoload.php'; 并指向当前目录,而实际上 'vendor' 已安装在根目录中。

【讨论】:

    【解决方案2】:

    你命令COPY . /usr/src/myappcomposer requirecomposer install之后执行。

    
    # PHP dependency manager
    FROM composer:1.9.3 AS composer
    
    FROM php:7.4.3-cli
    
    # Copies dependency manager into PHP image
    COPY --from=composer /usr/bin/composer /usr/local/bin/composer
    
    # Copies files from a source directory into the containers filesystem
    COPY . /usr/src/myapp
    WORKDIR /usr/src/myapp
    
    # Install RabbitMQ PHP client
    RUN apt-get -qq update && apt-get -qq -y install \
        git \
        libzip-dev \
        unzip \
        && docker-php-ext-install \
           sockets \
           zip \
        && composer require php-amqplib/php-amqplib \
        && composer install
    
    CMD ["php", "/usr/src/myapp/test.php"]
    
    

    【讨论】:

      猜你喜欢
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多