我有一个目录apkmirror-scraper-compose
,其结构如下:
.
├── docker-compose.yml
├── privoxy
│ ├── config
│ └── Dockerfile
├── scraper
│ ├── Dockerfile
│ ├── newnym.py
│ └── requirements.txt
└── tor
└── Dockerfile
我试图运行以下docker-compose.yml
:
version: '3'
services:
privoxy:
build: ./privoxy
ports:
- "8118:8118"
links:
- tor
tor:
build:
context: ./tor
args:
password: ""
ports:
- "9050:9050"
- "9051:9051"
scraper:
build: ./scraper
links:
- tor
- privoxy
Dockerfile
的{{1}}为
tor
FROM alpine:latest
EXPOSE 9050 9051
ARG password
RUN apk --update add tor
RUN echo "ControlPort 9051" >> /etc/tor/torrc
RUN echo "HashedControlPassword $(tor --quiet --hash-password $password)" >> /etc/tor/torrc
CMD ["tor"]
的内容
privoxy
其中FROM alpine:latest
EXPOSE 8118
RUN apk --update add privoxy
COPY config /etc/privoxy/config
CMD ["privoxy", "--no-daemon"]
由两行组成
config
listen-address 0.0.0.0:8118
forward-socks5 / tor:9050 .
的{{1}}是
Dockerfile
其中scraper
包含单行FROM python:2.7-alpine
ADD . /scraper
WORKDIR /scraper
RUN pip install -r requirements.txt
CMD ["python", "newnym.py"]
。最后,程序requirements.txt
旨在简单地测试使用Tor更改IP地址是否有效:
requests
newnym.py
已成功构建,但如果我尝试from time import sleep, time
import requests as req
import telnetlib
def get_ip():
IPECHO_ENDPOINT = 'http://ipecho.net/plain'
HTTP_PROXY = 'http://privoxy:8118'
return req.get(IPECHO_ENDPOINT, proxies={'http': HTTP_PROXY}).text
def request_ip_change():
tn = telnetlib.Telnet('tor', 9051)
tn.read_until("Escape character is '^]'.", 2)
tn.write('AUTHENTICATE ""\r\n')
tn.read_until("250 OK", 2)
tn.write("signal NEWNYM\r\n")
tn.read_until("250 OK", 2)
tn.write("quit\r\n")
tn.close()
if __name__ == '__main__':
dts = []
try:
while True:
ip = get_ip()
t0 = time()
request_ip_change()
while True:
new_ip = get_ip()
if new_ip == ip:
sleep(1)
else:
break
dt = time() - t0
dts.append(dt)
print("{} -> {} in ~{}s".format(ip, new_ip, int(dt)))
except KeyboardInterrupt:
print("Stopping...")
print("Average: {}".format(sum(dts) / len(dts)))
,则会收到以下错误消息:
docker-compose build
我尝试在此错误消息上搜索帮助,但无法找到。导致此错误的原因是什么?
答案 0 :(得分:128)
我已经看到它建议docker可能处于创建网络的最大数量。命令docker network prune
可用于删除至少一个容器未使用的所有网络。
我的问题最终正如Robert评论的那样:openvpn问题service openvpn stop
已解决'问题。
答案 1 :(得分:94)
我遇到了这个问题因为我运行了OpenVPN。一旦我杀死了OpenVPN,docker-compose up
立即向上发射,错误就消失了。
答案 2 :(得分:40)
关注Peter Hauge的comment,在运行docker network ls
后,我看到(以及其他行)以下内容:
NETWORK ID NAME DRIVER SCOPE
dc6a83d13f44 bridge bridge local
ea98225c7754 docker_gwbridge bridge local
107dcd8aa889 host host local
NAME
和DRIVER
同时为host
的行似乎就是他所指的“已在主机上创建的网络”。因此,在https://gist.github.com/bastman/5b57ddb3c11942094f8d0a97d461b430之后,我运行了命令
docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')
现在docker-compose up
有效(尽管newnym.py
会产生错误)。
答案 3 :(得分:19)
我有同样的问题。我跑了docker system prune -a --volumes
,docker network prune
,但都没有帮助我。
我使用VPN,我关闭了VPN,之后,docker正常启动,他可以创建网络。毕竟,您可以再次启用VPN
答案 4 :(得分:8)
docker-compose down
如果已连接VPN,请断开连接并再次尝试启动docker容器:
docker-compose up -d container_name
答案 5 :(得分:8)
无需杀死VPN。
另外comment about using a new network comes pretty close to the solution for me,并且工作了一段时间,但I found a better way thanks to some talk over in another question
使用以下方法创建网络:
docker network create your-network --subnet 172.24.24.0/24
然后,在docker-compose.yaml的底部,输入以下内容:
networks:
default:
external:
name: your-network
完成。无需将网络添加到所有容器定义等中,并且您也可以根据需要将网络与其他docker-compose文件一起重新使用。
答案 6 :(得分:7)
正如提到的其他答案一样,Docker的默认本地bridge
网络仅支持30个不同的网络(每个网络都可以通过其名称唯一地标识)。如果您不使用它们,那么docker network prune
可以解决问题。
但是,您可能有兴趣建立30多个容器,每个容器都有自己的网络。如果您对此感兴趣,则需要定义一个overlay
网络。这有点棘手,但here的文献记录非常丰富。
答案 7 :(得分:6)
我遇到了相同的错误消息,但删除未使用的docker网络的解决方案对我没有帮助。我删除了所有非默认的docker网络(以及所有图像和容器),但它没有帮助 - docker仍然无法创建新网络。
问题的原因是在OpenVpn安装后留下的网络接口。 (它之前安装在主机上。)我通过运行GoogleCredentials
命令找到它们:
ifconfig
我发现我可以用几个命令删除它们:
...
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.2 P-t-P:10.8.0.2 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:75 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:84304 (84.3 KB) TX bytes:0 (0.0 B)
tun1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.2 P-t-P:10.8.0.2 Mask:255.255.255.0
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:200496 errors:0 dropped:0 overruns:0 frame:0
TX packets:148828 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:211583838 (211.5 MB) TX bytes:9568906 (9.5 MB)
...
此后问题就消失了。
答案 8 :(得分:6)
你可以尝试
$sudo service network-manager restart
为我工作。
答案 9 :(得分:6)
运行 VPN 连接时出现同样的错误。尝试使用 docker-compose 创建 docker 镜像。 对我有用,可以暂时停止 VPN 连接并执行命令。
答案 10 :(得分:5)
如果您需要大量网络,则可以通过default-address-pools
守护进程设置控制docker分配给每个网络的IP空间数量,因此可以将其添加到/etc/docker/daemon.json
:
{
"bip": "10.254.1.1/24",
"default-address-pools":[{"base":"10.254.0.0/16","size":28}],
}
在这里,我为网桥网络保留了10.254.1.1/24
(254个IP地址)。
对于我创建的任何其他网络,docker将划分10.254.0.0
空间(65k主机),一次分配16台主机("size":28
指CIDR mask,共16台)主机)。
如果我创建了几个网络,然后在它们上运行docker network inspect <name>
,它可能会显示以下内容:
...
"Subnet": "10.254.0.32/28",
"Gateway": "10.254.0.33"
...
10.254.0.32/28
意味着此网络可以使用10.254.0.32
-10.254.0.47
中的16个IP地址。
答案 11 :(得分:4)
这发生在我身上,因为我正在使用OpenVPN
。我找到了一种无需停止使用VPN或将网络手动添加到docker-compose文件或运行任何疯狂脚本的方式。
我切换到WireGuard
而不是OpenVPN
。更具体地说,当我运行nordvpn解决方案时,我安装了WireGuard并使用了其版本的NordLynx。
答案 12 :(得分:3)
答案是:docker network prune
答案 13 :(得分:3)
我遇到了同样的问题
使用默认驱动程序创建网络“ schemaregistry1_default”
错误:在分配给网络的默认设置中找不到可用的,不重叠的IPv4地址池
,在关闭Cisco VPN之前,没有任何帮助。 在docker-compose up工作之后
答案 14 :(得分:3)
我遇到了同样的问题,原因是您达到了网络的最大数量:
执行以下操作:docker network ls
选择以下一项删除:docker network rm networkname_default
答案 15 :(得分:1)
我在OpenVPN也能正常工作的情况下遇到了这个问题,并且找到了不应该停止/启动OpenVPN服务器的解决方案。
想法,您应该指定要使用的确切子网。在docker-compose.yml
中写:
networks:
default:
driver: bridge
ipam:
config:
- subnet: 172.177.57.0/24
就是这样。现在,将使用default
网络,并且如果您的VPN没有从172.177.57.*
子网中分配您某些东西,您就可以了。
答案 16 :(得分:0)
我在未运行OpenVPN的企业开发VM上遇到了此问题。检出etc/docker/daemon.json
,发现了
...
"default-address-pools": [
{
"base": "192.168.11.0/24",
"size": 24
}
],
...
奇怪的是,删除default-address-pools
字段,然后用sudo systemctl restart docker
重新启动docker为我解决了这个问题。我假设这会让docker选择一个更合适的默认值,但是我不知道所选默认值有什么问题。
答案 17 :(得分:0)
如果您在 as.Date(paste0(df_Month$yearmonth, "-01"), format = "%Y-%m-%d")
中有很多网络,则需要运行 docker network ls
将此行添加到您的 crontab:
docker system prune -f
答案 18 :(得分:0)
我有同样的错误,但就我而言,那是因为我运行的容器太多(大约220个)。
答案 19 :(得分:0)
添加
version: "3.7"
services:
web:
...
network_mode: "bridge"
Read about network_mode
in the
documentation。
免责声明:我对Docker网络不是很了解,所以 对我有用的“解决方案”就像是魔咒和YMMV。
当我运行docker run my-image
时,网络没有问题,但是当
我将此命令转换为docker-compose.yml
文件,但遇到同样的错误
作为OP。
我读了Arenim's answer, 互联网上的其他一些建议重新使用现有网络的东西。
您可以找到这样的现有网络:
# docker network ls
NETWORK ID NAME DRIVER SCOPE
ca0415dfa442 bridge bridge local
78cbbda034dd host host local
709f13f4ce2d none null local
我想重用默认的bridge
网络,所以我添加了
services:
web:
...
networks:
default:
external:
name: bridge
到我的docker-compose.yml
的根(所以不在我的一个
services
,但在根缩进处。
我现在遇到以下错误:
错误:您的容器网络范围的别名仅支持 用户定义网络中的容器
这导致遇到this Docker Github
issue,这很明显
我应该将network_mode
对象添加到我的docker-compose
中:
version: "3.7"
services:
web:
...
network_mode: "bridge"
我使用的是Docker版本18.09.8
,docker-compose
版本1.24.1
和
撰写文件格式3.7
。
答案 20 :(得分:0)
我通过步骤解决了此问题:
关闭您的网络(无线或有线...)。
重新启动系统。
在PC上打开网络之前,执行命令docker-compose up,它将创建新的网络。
然后您可以打开网络并继续...