- docker/
- Docker容器在连接到localhost db时运行得很快,但在外部db上运行得很慢
Docker容器在连接到localhost db时运行得很快,但在外部db上运行得很慢
Docker容器在连接到localhost db时运行得很快,但在外部db上运行得很慢,docker,Docker,我正在docker容器上运行一个php应用程序。当我连接到本地数据库时,响应非常快(35秒)
我曾尝试使用谷歌的DNS,如我发现的一些链接所述,但没有成功。我的DNS解析在docker容器中非常快,要连接到Google Cloud SQL DB,我直接使用IP地址
我已经检查了这个链接和这个。这似乎是相关的,但不确定
我认为这是一个Docker问题,或者与容器有关,因为相同的远程db(在google cloud和aws上)用于其他应用程序,并且速度非常快。在我看来,这与容器内的网络有关
总之,这
我正在docker容器上运行一个php应用程序。当我连接到本地数据库时,响应非常快(<1秒)。当我连接到外部数据库(在谷歌云或亚马逊aws上运行)时,性能非常慢(>35秒)
我曾尝试使用谷歌的DNS,如我发现的一些链接所述,但没有成功。我的DNS解析在docker容器中非常快,要连接到Google Cloud SQL DB,我直接使用IP地址
我已经检查了这个链接和这个。这似乎是相关的,但不确定
我认为这是一个Docker问题,或者与容器有关,因为相同的远程db(在google cloud和aws上)用于其他应用程序,并且速度非常快。在我看来,这与容器内的网络有关
总之,这里是我用于测试的场景(DB内容完全相同):
1) 在Mac上作为本地主机在Docker容器中运行我的应用程序:
- 我的本地主机上的数据库(MAMP):非常快(<1秒)李>
- 谷歌云SQL上的数据库:非常慢(>35秒)李>
- 亚马逊RDS上的DB:非常慢(>35秒)李>
2) 在Docker容器中运行我的应用程序的Google计算引擎上:
- 谷歌云SQL上的数据库:非常慢(>35秒)李>
- 亚马逊RDS上的DB:非常慢(>35秒)李>
3) 在自定义Google app engine flex环境中,我的应用程序在Docker中运行:
- 谷歌云SQL上的数据库:非常慢(>35秒)李>
- 亚马逊RDS上的DB:非常慢(>35秒)李>
4) 在PHP Google app engine flex环境中:
- 谷歌云SQL上的数据库:非常慢(>35秒)李>
- 亚马逊RDS上的DB:非常慢(>35秒)李>
5) 当我的应用程序在Docker之外的Google计算引擎实例(PHP+apache)上运行时:
- 谷歌云SQL上的数据库:非常快(<1秒)李>
- 亚马逊RDS上的DB:非常快(<1秒)李>
6) 在本地主机(Mac)上Docker外部运行我的应用程序时:
- 谷歌云SQL上的数据库:非常快(<1秒)李>
- 亚马逊RDS上的DB:非常快(<1秒)李>
- 我的本地主机上的数据库(MAMP):非常快(<1秒)李>
有人知道解决或发现问题的方法吗?我知道这是一个可能很难解决的问题。所以,我的问题更多的是关于我应该如何调试它来发现问题
我的Dockerfile:
FROM php:7.0.17-apache
RUN apt-get update
RUN apt-get install -y apt-utils curl vim
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
RUN docker-php-ext-install pdo pdo_mysql && docker-php-ext-enable pdo_mysql
RUN pecl install xdebug
# The base image does not have php.ini.
# Copy our own, with xdebug settings
ADD ./php.ini /usr/local/etc/php/
# Configure apache
RUN a2enmod rewrite
RUN a2dissite 000-default.conf
# Copy sites available
ADD ./www.metalar.net.conf /etc/apache2/sites-available/
# Copy Ports file
ADD ./ports.conf /etc/apache2/
# Copy Ports file
ADD ./apache2.conf /etc/apache2/apache2.conf
# Copy error log
ADD ./error.log /var/log/apache2/error.log
# Make directory to host project files
RUN mkdir -p /srv/www/www.metalar.net
# Copy App to proper destination
ADD . /srv/www/www.metalar.net
# Enable config
RUN a2ensite www.metalar.net.conf
EXPOSE 8080
来自php:7.0.17-apache
运行apt获取更新
运行apt get install-y apt utils curl vim
运行docker php ext安装mysqli&&docker php ext启用mysqli
运行docker php ext安装pdo pdo_mysql&&docker php ext启用pdo_mysql
运行pecl安装xdebug
#基本映像没有php.ini。
#使用xdebug设置复制我们自己的
添加./php.ini/usr/local/etc/php/
#配置apache
运行a2enmod重写
运行advisite 000-default.conf
#复制可用的站点
添加/www.metalar.net.conf/etc/apache2/sites available/
#复制端口文件
添加./ports.conf/etc/apache2/
#复制端口文件
添加./apache2.conf/etc/apache2/apache2.conf
#复制错误日志
添加./error.log/var/log/apache2/error.log
#使目录成为项目文件的宿主
运行mkdir-p/srv/www/www.metalar.net
#将应用程序复制到正确的目的地
加上/srv/www/www.metalar.net
#启用配置
运行a2ensite www.metalar.net.conf
曝光8080
netstat-s
Ip:
187 total packets received
0 forwarded
0 incoming packets discarded
187 incoming packets delivered
163 requests sent out
Icmp:
0 ICMP messages received
0 input ICMP message failed.
ICMP input histogram:
0 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
Tcp:
2 active connections openings
0 passive connection openings
0 failed connection attempts
0 connection resets received
0 connections established
181 segments received
157 segments send out
0 segments retransmited
0 bad segments received.
0 resets sent
Udp:
6 packets received
0 packets to unknown port received.
0 packet receive errors
6 packets sent
UdpLite:
TcpExt:
2 TCP sockets finished time wait in fast timer
171 packet headers predicted
4 acknowledgments not containing data payload received
TCPRcvCoalesce: 82
TCPOrigDataSent: 4
IpExt:
InOctets: 234466
OutOctets: 7205
InNoECTPkts: 187
知识产权:
共收到187个数据包
0转发
丢弃0个传入数据包
187个传入数据包已发送
发出163项请求
Icmp:
收到0条ICMP消息
0输入ICMP消息失败。
ICMP输入直方图:
已发送0个ICMP消息
0 ICMP消息失败
ICMP输出直方图:
Tcp:
2个主动连接开口
0个被动连接开口
0次连接尝试失败
接收到0个连接重置
已建立0个连接
收到181段
发送157段
0段重新传输
接收到0个坏段。
已发送0个重置
Udp:
收到6个数据包
接收到0个到未知端口的数据包。
0数据包接收错误
已发送6个数据包
UdpLite:
TcpExt:
2个TCP套接字在快速计时器中完成等待时间
预测171个数据包头
4接收到不包含数据有效负载的确认
TCPRcvCoalesce:82
TCPOrigDataSent:4
IpExt:
InOctets:234466
输出八位字节:7205
InnoctPKTS:187
首先,您使用的Docker版本是什么
因为不久前我在Mac上运行Docker时遇到了类似的问题,我发现Docker for Mac的一个已知问题也可能与您有关
此问题已映射到以下问题
他们提供了一个解决方案,但现在应该足以更新Docker以解决性能差的问题
然而,这些已知的问题并不能解释行为2和行为3,所以我想这是没有关系的,但值得我提及
调试
关键是,这不是服务器或应用程序的问题,因此我将重点调试Docker的网络部分,因为某些原因,该部分无法按预期工作
这些只是一般性的建议,但是你可以在Docker论坛上找到更多的信息
为了调试,我将打开两个终端,使用第一个终端,我将ssh连接到容器中,与本地机器并行运行所有命令,以便比较结果
- 我会检查从容器下载文件的速度是否与谷歌云存储和任何随机网站的下载速度相似
Ping
MySql实例并比较延迟
Traceroute
指向MySql实例并检查pat