Memcached 无法在特定 docker 容器中自动运行

Memcached not working automatically in a specific docker container

我正在尝试 运行 docker 中的一个 Symfony 应用程序,最初我从一个完整的 ubuntu 图像开始,但现在我想将它剥离到 docker =17=] 基本图像,但我在使用 memcached 时遇到了一个奇怪的问题。我将尝试描述问题,但首先这是我的 ubuntu 图片:

FROM ubuntu

ENV DEBIAN_FRONTEND=noninteractive

RUN  apt-get update \
    && apt-get install -y php wget git build-essential libxml2-dev zip unzip \
    software-properties-common vim memcached php-zip \
    php-memcached php-curl php-dom php-apcu php-mysql \
    && rm -rf /var/lib/apt/lists/*

...

EXPOSE 80

CMD ["apache2ctl", "-D", "FOREGROUND"]

这是我的 php7.4-apache 图片

FROM php:7.4-apache

# install system packages
RUN apt-get update && apt-get install -y \
    git libxml2-dev zlib1g-dev libzip-dev libmemcached-dev memcached

# install PECL packages
RUN pecl install pecl/apcu_bc-1.0.3 memcached igbinary msgpack

# install php extensions
RUN docker-php-ext-install dom pdo_mysql zip session

# enable php extensions
RUN docker-php-ext-enable memcached apcu igbinary msgpack

# copy the custom php.ini
COPY .docker/php/php.ini /usr/local/etc/php/conf.d/

# remove cache dirs
RUN rm -rf /var/lib/apt/lists/*

...

EXPOSE 80

这是我的自定义 php.ini 的样子:

# configure apc
extension=apc.so
apc.enable_cli=1
# configure sessions
session.save_path="/var/lib/php/sessions"

所以问题是应用程序使用 memcached 进行会话。每当我使用 apache7.4-apache 时,应用程序都会抛出以下错误:

Warning: session_write_close(): Failed to write session data using user defined save handler.

但是如果我在 运行ning docker 容器中手动 运行 service memcached start 并且应用程序开始正常工作,这个错误就会消失。

但是我在 ubuntu 图像中根本没有收到此错误消息。

所以为了缩小范围,我认为 php-memcacheddocker-php-ext-install memcached 有一些不同。

以下是来自两个容器的 service --status-all 的输出:

php7.4-apache
 [ - ]  apache-htcacheclean
 [ + ]  apache2
 [ ? ]  hwclock.sh
 [ - ]  memcached
 [ - ]  procps

ubuntu
 [ - ]  apache-htcacheclean
 [ + ]  apache2
 [ - ]  dbus
 [ ? ]  hwclock.sh
 [ - ]  memcached
 [ - ]  procps
 [ - ]  unattended-upgrades

那么 ubuntu 如何在不启动服务的情况下使用 memcached 以及为什么 php7.4-apache 不能这样做?

更新:

进一步挖掘后,php7.4-apache 使用 memcached=1.5.6ubuntu 使用 memcached=1.5.22。我查看了这些发行说明,我认为这可能是相关的: https://github.com/memcached/memcached/wiki/ReleaseNotes1518

非常怀疑是否有人会遇到相同的情况,但我通过为 memcached 使用单独的 docker 容器并将我的应用程序连接到该容器来解决它。