两个php7-apache docker映像,一个有效,另一个无效。找不到区别

时间:2018-10-30 18:37:01

标签: php mysql docker mysqli

我在不同的日期创建了两个Docker映像。一个可以连接一个单独的mysql 8.0映像,另一个则不能。

映像的历史记录是我制作了一个可行的映像,并对Dockerfile进行了可移植性调整,然后当该映像不起作用时,我将Dockerfile恢复为原始映像-但仍然无法正常工作。我在构建中添加了--no-cache选项,但这没有帮助。

详细信息:

这是Dockerfile:

FROM php:7.2-apache

RUN apt-get update && apt-get install -y \
    apt-utils \
    zlib1g-dev \
    libmemcached-dev \
    memcached \
    libevent-dev \
    libc-client-dev \
    curl \
    libxml2-dev \
    zip \
    unzip \
    ldap-utils \
    && docker-php-ext-install mysqli pdo_mysql \
    && pecl install memcached xdebug \
    && docker-php-ext-enable memcached xdebug

RUN service memcached restart

这是php中适用于一个图像而不是另一个图像的行:

mysqli_connect('mysql80', 'my_username', 'my_password', 'my_database');

错误是:

Message: mysqli_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known

但是,当我从正在运行的EITHER容器的命令行运行以下命令时,它工作得很好:

mysql --host=mysql80 -umy_username -pmy_password

除了要侦听的端口以外,我使用相同的指令运行容器,并使用除映像名称之外相同的脚本将它们连接到网络。

我在运行两个图像的实例时检查的其他事项:

  1. php -i产生相同的结果,除了课程HOSTNAME
  2. 同样,代码中的phpinfo()除端口和HOSTNAME以外的结果相同。
  3. apache2ctl -M在两者之间是相同的
  4. apt list --installed列出了相同的软件包
  5. 我目前将它们连接到相同的网桥网络,并与相同的mysql实例通信。
  6. 他们正在从相同的已安装源目录运行php代码(通过更改代码进行确认)。

为完整起见,这是我运行两个图像的方式(通常,我一次只能运行一个图像,但是同时运行两个图像不会改变行为。)

# newer image that doesn't work
docker run -d -p 8787:80 --name awesomeApp \
  -v /path/to/php/src:/var/www/html \
  -e DB_HOST='mysql80' \
  awesomeImage:latest

docker network connect awesome-net awesomeApp

# old image that does work
docker run -d -p 8788:80 --name oldAwesome \
  -v /path/to/php/src:/var/www/html \
  -e DB_HOST='mysql80' \
  awesomeImage:oldOneThatWorks

docker network connect awesome-net oldAwesome

我已经用光了所有的内容,试图在图像之间找到有意义的区别,并且需要能够修改图像并使之正常工作。欢迎任何建议。

0 个答案:

没有答案