尝试通过 Docker 安装夹层
Posted
技术标签:
【中文标题】尝试通过 Docker 安装夹层【英文标题】:Trying to install Mezzanine via Docker 【发布时间】:2015-05-04 18:23:30 【问题描述】:我正在尝试在 Docker 上安装 Mezzanine 以测试 Docker
我已将 Container 与 this postgres db 一起使用,在 Mezzanine 容器上进行了一些自定义(即注释掉),并使用 start.sh 脚本包含数据库信息。
当我运行这 2 个 Docker 命令时:
docker run -P --name some_web -p 80:80 --link some_db:db myapp/mezzanine-docker
db: docker run -d --name="some_db" -e 'PSQL_TRUST_LOCALNET=true' myapp/docker-postgresql:latest
它会抛出这个错误: 服务器是否在主机“127.0.0.1”上运行并接受 端口 5432 上的 TCP/IP 连接?
为什么?只需要一个指向正确方向的指针。
【问题讨论】:
您的问题中的命令顺序是否正确?当您打算将some_db
链接到some_web
时,您应该在应用程序容器之前创建数据库容器。
不,我没有注意到它们被翻转了。我先运行 db 命令。
【参考方案1】:
我同意@helmbert,因为有时我会遇到docker-compose
的奇怪行为。对我来说,docker-compose
似乎无法保证容器的运行顺序。所以如果mezzanine
在数据库初始化之前启动,显然会失败。
但您描述的错误性质表明您的基于django
的应用程序配置不正确。检查settings.py
中DATABASES['default']['HOST']
的值,它必须等于db
。
【讨论】:
"HOST" 设置为 127.0.0.1,我读过的所有内容都推荐该设置。有什么建议吗? 只有在您的开发工作站上执行此操作时才可以:当网络服务器和数据库都在同一主机上工作时 - 您的机器。但是您正在尝试创建一个分布式 Web 应用程序。所以你有两个不同的虚拟机——docker容器。他们应该作为真正的主机进行交互,并通过主机名相互调用。所以你有两个选择:要么覆盖DATABASES['default']['HOST']
(并使其等于db
),要么在主机上公开PostgreSQL端口(@987654330@)。
啊,好吧,我觉得我脑子里的灯泡亮了:)。那么这个命令, docker run -P --name some_web -p 80:80 --link some_db:db myapp/mezzanine-docker, 真的应该 .... -p 5432:5432 .... ?
您是否尝试修复DATABASES['default']['HOST']
字段? 127.0.0.1
value 是一个明显的错误。如果您出于某种原因不想修复此错误,则可以将postgres
容器端口映射到您的主机端口(如果postgres
客户端仅在同一主机上工作,则应将其视为错误设计): 1.docker run -d --name="some_db" -p 5432:5432 -e 'PSQL_TRUST_LOCALNET=true' myapp/docker-postgresql:latest
2.docker run --name some_web -p 80:80 --link some_db:db myapp/mezzanine-docker
是的,我修复了HOST设置,只需要测试一下。我会在这里发布结果以上是关于尝试通过 Docker 安装夹层的主要内容,如果未能解决你的问题,请参考以下文章
在 Debian 拉伸 Docker 映像上安装保险丝时遇到问题
Docker python无法导入通过apt-get安装的模块