为更多并行运行/启动容器配置docker和docker compose
TL;医生: 当启动总共12个容器(分布在四个docker compose应用程序(每个应用程序定义了三个服务)时,无论下面的硬件有多强大,都会发生此错误:为更多并行运行/启动容器配置docker和docker compose,docker,docker-compose,Docker,Docker Compose,TL;医生: 当启动总共12个容器(分布在四个docker compose应用程序(每个应用程序定义了三个服务)时,无论下面的硬件有多强大,都会发生此错误: UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=60) 是否存在限制或改进docker引擎并行运行/启动或docker套接字读取性能的配置 提高读取超时(就像许多论坛上建议的那样)似乎不是解决这个问题的正确方法 长版本:
UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=60)
是否存在限制或改进docker引擎并行运行/启动或docker套接字读取性能的配置
提高读取超时(就像许多论坛上建议的那样)似乎不是解决这个问题的正确方法
长版本:
我正在使用docker compose启动我的主题应用程序进行集成测试
在此集成测试过程中,每个客户机都会启动并使用其个性化的测试文件进行测试
docker compose文件由三个服务组成:
- PHP
- MySQL
- Neo4j
#!/bin/bash -e
clients=("a" "b" "c" "d" "e")
declare -A pids
pids=()
for client in "${clients[@]}"; do
joblist=($(jobs -p))
while
((${#joblist[*]} >= 3))
do
sleep 1
joblist=($(jobs -p))
done
{
docker-compose -f $client/docker-compose.yml up -d
#wait for mysql
while ! docker-compose -f $client/docker-compose.yml exec -T mysql isAlive.sh; do
sleep 1
done
#wait for neo4j
while ! docker-compose -f $client/docker-compose.yml exec -T neo4j isAlive.sh; do
sleep 1
done
#run tests
for i in $client/tests/*.yml; do
if ! runTest $i; then
exit 1
fi
done
} &
pids["$client"]="$!"
done
for p in "${!pids[@]}"; do
if ! wait "${pids[$p]}"; then
echo "error with $p"
exit 1
fi
done
当在虚拟机(6个虚拟CPU、专用SSD存储和48 GB RAM)中运行这些测试时,三个测试的并行化非常健壮。上面的所有内容都开始返回如下错误
UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=60)
我认为这与虚拟机的性能有关,
现在我升级到一台裸机(2x 8核CPU@超过3GHz/核,60 GB RAM,SSD存储),尽管所有组件(CPU、RAM、存储网络[我自己和我的主机检查过])的利用率都很低,但这个问题仍然存在
提高读取超时似乎不是正确的解决方案,因为在利用服务器提供的全部性能时存在一些错误。这可能是一些docker配置或限制,我找不到任何与此相关的信息。这看起来像是docker守护程序本身正在备份。等待服务准备就绪的
一些代码有什么作用?如果它做了类似于docker ps的事情,在一个紧密的循环中,我可以看到最终会遇到这样的问题。@DavidMaze我扩展了代码示例以涵盖您的问题。为什么即使底层的裸机系统功能强大得多,你也能看到这样的问题?除了重写代码以不使用docker命令之外,还有什么方法可以防止这种情况发生?这看起来就像docker守护进程本身正在备份一样。等待服务准备就绪的一些代码有什么作用?如果它做了类似于docker ps的事情,在一个紧密的循环中,我可以看到最终会遇到这样的问题。@DavidMaze我扩展了代码示例以涵盖您的问题。为什么即使底层的裸机系统功能强大得多,你也能看到这样的问题?除了重写代码以不使用docker命令外,还有什么方法可以防止这种情况发生?