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-memcached
和 docker-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.6
而 ubuntu
使用 memcached=1.5.22
。我查看了这些发行说明,我认为这可能是相关的:
https://github.com/memcached/memcached/wiki/ReleaseNotes1518
非常怀疑是否有人会遇到相同的情况,但我通过为 memcached
使用单独的 docker 容器并将我的应用程序连接到该容器来解决它。
我正在尝试 运行 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-memcached
和 docker-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.6
而 ubuntu
使用 memcached=1.5.22
。我查看了这些发行说明,我认为这可能是相关的:
https://github.com/memcached/memcached/wiki/ReleaseNotes1518
非常怀疑是否有人会遇到相同的情况,但我通过为 memcached
使用单独的 docker 容器并将我的应用程序连接到该容器来解决它。