在浏览了所有关于这个主题的Stackoverflow线程之后,我仍然无法解决这个问题。这只发生在我的Fedora笔记本电脑上,在我的Macbook上,码头集装箱工作得很好。我的docker-compose.yml文件非常标准:
version: "3.8"
services:
app:
container_name: data-management
restart: always
build: ./
ports:
- '3000:3000'
links:
- 'postgresdb'
volumes:
- ./:/usr/local/share/src/app
env_file:
- .dev.env
postgresdb:
container_name: be-postgres
restart: always
image: postgres:12.7-alpine
ports:
- '5432:5432'
volumes:
- postgres-db:/var/lib/postgresql/data
env_file:
- .dev.env
volumes:
postgres-db:如您所见,两个容器中的环境变量都是从文件中读取的:
POSTGRES_PASSWORD=devpassword123
POSTGRES_USER=devuser
POSTGRES_SERVICE=postgresdb
POSTGRES_PORT=5432这些env变量也在settings.py中使用。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': os.environ['POSTGRES_SERVICE'],
'NAME': os.environ['POSTGRES_USER'],
'PORT': os.environ['POSTGRES_PORT'],
'USER': os.environ['POSTGRES_USER'],
'PASSWORD': os.environ['POSTGRES_PASSWORD'],
}
}我遇到的问题是django应用程序无法连接到postgresDB:
django.db.utils.OperationalError:无法连接到服务器:主机不可访问,服务器是否运行在主机"postgresdb“(172.xx.x.x)上,并在端口5432上接受TCP/IP连接?
我还检查了postgres集装箱中的港口是否打开,它是:
/ # netstat -tuplen
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.11:37009 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN -
tcp 0 0 :::5432 :::* LISTEN -
udp 0 0 127.0.0.11:59651 0.0.0.0:* -最后,但并非最不重要的,我点击postgres容器从django一号,似乎每件事都是好的。
这在我的macbook机器上运行得很好,因此,我认为我的Fedora笔记本电脑出了问题。我还注意到了一些其他的东西,我也发现奇怪的是django容器构建得很好,但是当我试图从容器安装一个包时,我会得到一个错误:
/usr/local/share/src/app # apk add gcc
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.13/main: temporary error (try again later)
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/main: No such file or directory
fetch https://dl-cdn.alpinelinux.org/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
ERROR: https://dl-cdn.alpinelinux.org/alpine/v3.13/community: temporary error (try again later)
WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/community: No such file or directory我的Linux、docker以及网络技术肯定不足以解释为什么我的Fedora笔记本电脑很难运行这个简单的设置。
发布于 2022-03-12 18:01:36
结果,Fedora转而使用nftable,这与Docker不太合拍。最简单的解决方案是切换回iptables - sudo vim /etc/firewalld/firewalld.conf和change
# FirewallBackend
# Selects the firewall backend implementation.
# Choices are:
# - nftables (default)
# - iptables (iptables, ip6tables, ebtables and ipset)
FirewallBackend=iptables有关更多信息,请参见这里被接受的答案
发布于 2021-11-10 13:05:48
试着使用标志“-网络主机”进行构建。这是链接
https://stackoverflow.com/questions/68671378
复制相似问题