我在不同的日期创建了两个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
除了要侦听的端口以外,我使用相同的指令运行容器,并使用除映像名称之外相同的脚本将它们连接到网络。
我在运行两个图像的实例时检查的其他事项:
php -i
产生相同的结果,除了课程HOSTNAME
phpinfo()
除端口和HOSTNAME
以外的结果相同。apache2ctl -M
在两者之间是相同的apt list --installed
列出了相同的软件包为完整起见,这是我运行两个图像的方式(通常,我一次只能运行一个图像,但是同时运行两个图像不会改变行为。)
# 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
我已经用光了所有的内容,试图在图像之间找到有意义的区别,并且需要能够修改图像并使之正常工作。欢迎任何建议。