【发布时间】: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,你帮我指明了正确的方向。