尝试通过 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.pyDATABASES['default']['HOST']的值,它必须等于db

【讨论】:

"HOST" 设置为 127.0.0.1,我读过的所有内容都推荐该设置。有什么建议吗? 只有在您的开发工作站上执行此操作时才可以:当网络服务器和数据库都在同一主机上工作时 - 您的机器。但是您正在尝试创建一个分布式 Web 应用程序。所以你有两个不同的虚拟机——docker容器。他们应该作为真正的主机进行交互,并通过主机名相互调用。所以你有两个选择:要么覆盖DATABASES['default']['HOST'](并使其等于db),要么在主机上公开PostgreSQL端口(@98​​7654330@)。 啊,好吧,我觉得我脑子里的灯泡亮了:)。那么这个命令, 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 安装夹层的主要内容,如果未能解决你的问题,请参考以下文章

CentOS通过yum安装Docker

在 Debian 拉伸 Docker 映像上安装保险丝时遇到问题

通过命令行在 Mac 上安装 Docker Toolbox

Docker python无法导入通过apt-get安装的模块

无法在 Ubuntu 16.04 中启动 Docker 服务

如何部署:安装夹层主题