我已经创建并将php-apache容器与MYSQL容器链接起来。但是当我试图从php文件中使用PDO建立连接时,我得到了错误。有人知道怎么修好它吗?多谢了。
PDO错误:
致命错误:未捕获的PDOException:PDO::__Construct():php_network_getAddress:getaddrinfo失败:名称或服务在/var/www/html/index.php:3 Stack Trace:#0/var/www/html/index.php(3):pdo->__Construct('mysql:host=mysq...','root','root')#1{main}下一个PDOException:SQLState[HY000][2002]php_network_getAddress:getaddrinfo失败:名称或服务在
我的目录结构:
.
├── mysql
├── php
| └── Dockerfile
├── src
| └── index.php
└── docker-compose.yml
我的index.php的内容:
$connection = new PDO('mysql:host=mysql-db,dbname=app', 'root', 'root');
PHP DockerFile:
FROM php:7.3.3-apache
RUN docker-php-ext-install -j$(nproc) pdo_mysql
docker-compose.yml:
version: '3'
services:
apache-php:
build:
./php
volumes:
- ./src:/var/www/html
ports:
- "8080:80"
depends_on:
- mysql-db
links:
- mysql-db
mysql-db:
image: mysql:5.7
ports:
- "3306:3306"
volumes:
- /mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: app
毕竟,在我的php代码中,主机定义后面有一个逗号,而不是分号。我向你道歉。
我有两个问题在做这件事:
1)php:Apache映像需要大量的工作来运行php应用程序,最好只制作自己的映像,我是从ubuntu 18:04的映像中制作的
2)我不记得为什么,但需要将mysql设置为允许mysql_native_passwords,以便与php一起工作(在我的情况下)
下面是我在课堂上为一个测试做的docker-compose文件(因此名为examen的标记),以共享我的web应用程序:
version: '3'
services:
app:
image: gnomejodas/httpd-php:examen
ports:
- 80:80
volumes:
- ./src:/var/www/html
links:
- db
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
volumes:
- ./db:/var/lib/mysql
我是一个超级新手开发人员(还在学习),请对我宽容一点。
编辑。如果您创建了自己的映像,请不要忘记cmd apachectl-d foreground
,以便在运行容器时启动apache服务。
首先,您不需要链接:
,这将自动完成,因为两个服务都在同一个网络中。
其次,depends_on
不会等到MySQL服务器启动并运行,并且PHP服务有可能在准备就绪之前开始通信,这就是您收到此错误的原因。
在这种情况下,最好为PHP服务实现“等待”功能。
为此,您需要向PHP服务添加一个入口点,并编写如下代码
docker文件
COPY ./docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
Docker-EntryPoint.sh
#!/bin/sh -e
until nc -vz mysql-db:3306 > /dev/null; do
>&2 echo "mysql-db:3306 is unavailable - sleeping"
sleep 2
done
>&2 echo "mysql-db is up"
exec "YOUR COMMAND"
exit 0
问题内容: 我尝试使用和设置元素的样式。 然而,它没有工作:表现得像,并表现得像个。 在Firefox和Chrome上都会发生这种情况,但奇怪的是,它在IE上有效。 是虫子吗?在HTML5和CSS Flexible Box Layout规范中,我都找不到应该有的特殊行为。 问题答案: 根据错误984869- 对按钮元素不起作用, 不能在纯CSS中实现(由浏览器实现),因此从CSS的角度来看,它们有
Docker中容器网络不通,宿主机跟容器,容器跟docker0,容器跟容器网络都不通? 使用 tcpdump -i docker0 抓包时容器的网络就通了,但是关闭 tcpdump -i docker0容器的网络又不通了。
我正在我的机器上的docker容器中运行服务器。我想从我的机器(主机)向容器内的服务器发送HTTP请求。当我在容器中使用HTTP发送GET请求时,它会检测服务器。但是,如果我向容器的IP地址发送相同的请求(这次是从容器外部的主机),它会告诉我: 或者这个: 下面是我启动容器时使用的命令: 以及我为发送请求而运行的Python脚本: 下面是我用来查找容器IP地址的命令: 我知道这个问题,但我没有使用
(由于我对Docker或mysql管理的了解有限,这可能是一个愚蠢的问题,但由于我花了整整一个晚上讨论这个问题,所以我敢问这个问题。) 概括地说 我想在docker容器中运行mysql,并从我的主机连接到它。到目前为止,我取得的最好成绩是: 更多详细信息 我正在使用以下: 在有此文件的目录中,我可以成功地构建映像并运行它: 当我连接到图像上时,它似乎工作得很好: 然而,我并没有从主持人那里获得那么
问题内容: 我正在开发服务,并在那里使用docker compose来旋转诸如postgres,redis,elasticsearch之类的服务。我有一个基于RubyOnRails的Web应用程序,并从所有这些服务中进行读写操作。 这是我的 我可以在此网络中ping容器 到目前为止,一切都很好。现在我想在主机上的Rails应用程序上运行ruby,但是能够像目前这样使用url访问postgres实例
有没有办法通过在容器的命令行中发送命令来重命名lxc容器主机名?我知道您可以执行类似于的操作,然后使用()重命名配置中的主机名和路径。 但是,我可以不离开容器的控制台,然后在主控制台中键入内容来完成它吗?