【问题标题】:How to configure docker and postgres to use pact broker如何配置 docker 和 postgres 以使用协议代理
【发布时间】:2017-02-08 13:58:45
【问题描述】:

localhost to view pacts

我已经安装了 brew 版本的 postgres 和 docker。 按照链接 https://github.com/DiUS/pact_broker-docker/blob/master/POSTGRESQL.md 中的步骤创建一个 dockerised pact broker 和 postgres。

当我运行第一个命令时,容器被错误创建:

docker run --name pactbroker-db -e POSTGRES_PASSWORD=ThePostgresPassword -e POSTGRES_USER=admin -e PGDATA=/var/lib/postgresql/data/pgdata -v /var/lib/postgresql/data:/var/lib/postgresql/data -d postgres

回复:

 b8a2007e5dac9554e0ac615147d74467ceb6043dba027a4a21388721cee8f34c
    docker: Error response from daemon: Mounts denied: 
    The path /var/lib/postgresql/data
    is not shared from OS X and is not known to Docker.
    You can configure shared paths from Docker -> Preferences... -> File Sharing...

通过删除绑定卷选项以某种方式绕过了第一步:

docker run --name pactbroker-db -e POSTGRES_PASSWORD=ThePostgresPassword -e POSTGRES_USER=admin -e PGDATA=/var/lib/postgresql/data/pgdata -d postgres

在指定的链接中成功执行了 2 和 3 步: (2)连接容器并通过以下方式执行psql: (3)通过以下方式启动 PactBroker 容器:

在此之后,尝试使用以下命令卷曲 json:

 curl -v -XPUT -H “Content-Type: application/json” -d @/HelloWorldConsumer-HelloWorldProvider.json http://localhost/pacts/provider/HelloWorldProvider/consumer/HelloWorldConsumer/version/1.0

得到以下响应...

Could not resolve host: application
* Closing connection 0
    curl: (6) Could not resolve host: application
    *   Trying ::1...
    * connect to ::1 port 80 failed: Connection refused
    *   Trying 127.0.0.1...
    * Connected to localhost (127.0.0.1) port 80 (#1)
    > PUT /pacts/provider/HelloWorldProvider/consumer/HelloWorldConsumer/version/1.0 HTTP/1.1
    > Host: localhost
    > User-Agent: curl/7.49.1
    > Accept: */*
    > Content-Length: 756
    > Content-Type: application/x-www-form-urlencoded
    > 
    * upload completely sent off: 756 out of 756 bytes
    < HTTP/1.1 415 Unsupported Media Type
    < Content-Type: application/json;charset=utf-8
    < Content-Length: 0
    < Connection: keep-alive
    < Status: 415 Unsupported Media Type
    < Date: Tue, 07 Feb 2017 17:08:40 GMT
    < Server: Webmachine-Ruby/1.4.0 Rack/1.2
    < X-Powered-By: Phusion Passenger 5.0.15
    < 
    * Connection #1 to host localhost left intact

不确定它是成功还是失败,正如第一行所说...“无法解析主机:应用程序”和“正在关闭连接”

当我尝试查看本地主机时,它显示为空白。 附上截图。 尽早寻求帮助!提前谢谢...

【问题讨论】:

  • 这显然不是一个协议问题,而是一个 docker 问题,特别是围绕 Postgres SQL 服务器。除非您想将问题更改为特定于 Pact 的问题,否则我将将此问题报告为不相关。
  • 谢谢!编辑并添加标签到 docker/Postgres
  • 谢谢。如果你问的是不同的观众,我可能会重新措辞一下这个问题,这样他们就不会对协议感到困惑。
  • 好的,没问题!

标签: postgresql docker


【解决方案1】:

您似乎正试图在您的主机 (/var/lib/postgresql/data) 上挂载一个不存在的卷。

docker: Error response from daemon: Mounts denied: 
The path /var/lib/postgresql/data
is not shared from OS X and is not known to Docker.

消息清楚地说明了这一点。你应该 read more 关于 docker 卷,但如果这是为了在你的 Mac 上开发,我建议你挂载另一个目录。

其次,您可以看到上传时收到“不支持的媒体类型”,因此它肯定失败了:

HTTP/1.1 415 Unsupported Media Type

似乎没有正确设置 Content-Type,您可以在输出中看到:

Content-Type: application/x-www-form-urlencoded

请检查该文件是否确实存在于路径 /HelloWorldConsumer-HelloWorldProvider.json,它是一个有效的 JSON 文件,并且您的内容类型标头的格式正确(看起来是这样)。

【讨论】:

  • 感谢马修的回复!将阅读有关 docker 卷的信息,更正它并验证内容类型。如果我没有回答正确的问题,我会回来。
  • 谢谢马修!它起作用了...使用 initdb 命令创建了数据集群 postgresql。 mkdir ~/.postgres 和 initdb ~/.postgres 所以我的命令看起来像... docker run --name pactbroker-db -e POSTGRES_PASSWORD=ThePostgresPassword -e POSTGRES_USER=admin -e PGDATA=/var/lib/postgresql/data /pgdata -v ~/.postgres:/var/lib/postgresql/data -d postgres.同样对于第二个问题 - 不支持的数据类型.. 它只是格式不正确的双引号 - 将此“Content-Type: text/html”更改为“Content-Type: text/html”。它就像一个魅力。
  • 很高兴听到@JananiSampathKumar!你能把我的答案标记为正确吗?
猜你喜欢
  • 1970-01-01
  • 2018-10-18
  • 2019-05-13
  • 2018-06-21
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
相关资源
最近更新 更多