如何从 docker 容器向主机发送 tcp/ip 请求?
How do you send tcp/ip requests from a docker container to the host?
我正在研究如何 运行 使用 docker 打开项目。我正在处理 openproject/docker.
我有 docker 图像 运行 一个外部 postgres 目录。
我现在正在研究如何连接到现有的 运行ning postgresql 实例。
根据官方文档,我使用的命令行看起来没问题。
编辑。添加在缺少的-p.
docker run -p 8082:80 -p 5432:5432 --name openproject_dev -e SECRET_KEY_BASE=secret -e DATABASE_URL=postgresql://openproject:openproject-dev-
password@localhost:5432/openproject_dev \
-v /Users/admin/var/lib/openproject/logs:/var/log/supervisor \
-v /Users/admin/var/lib/openproject/static:/var/db/openproject openproject/community:5.0
我省略了 -d [deamon] 标志,这样我就可以看到任何错误。
创建 docker 容器时,我得到
-----> You're using an external database. Not initializing a local database cluster.
/usr/src/app /usr/src/app
Starting memcached: memcached.
如我所料。
然后我收到关于连接到我不期望的 postgresql 服务器的错误。
...
PG::ConnectionBad: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
/usr/local/bundle/gems/activerecord-
4.2.7.1/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `initialize'
我猜初始化容器的脚本期望 postgres 是 运行ning 而不是。您将如何使 docker 容器端口将对 5432 的请求转发到命令行上的主机? ...与 docker 运行 -p 5432:5432 相反...将 docker 容器中的 5432 暴露给主机。
-e DATABASE_URL=postgresql://openproject:openproject-dev-
password@localhost:5432/openproject_dev
添加此 url 时,容器希望 postgres 运行在本地主机上运行,即在其自身中。
如果您在主机上 运行ning postgres,您可以通过在 运行 命令中传递 --network host
让容器与主机共享网络堆栈。在这种情况下,localhost 将引用 postgres 运行ning.
所在的主机
您目前的做法是错误的
docker run -p 8082:80 -p 5432:5432 --name openproject_dev -e SECRET_KEY_BASE=secret -e DATABASE_URL=postgresql://openproject:openproject-dev-password@localhost:5432/openproject_dev \
-v /Users/admin/var/lib/openproject/logs:/var/log/supervisor \
-v /Users/admin/var/lib/openproject/static:/var/db/openproject openproject/community:5.0
当您使用 -p 5432:5432
时,这意味着您希望在该端口上的 docker 内部 运行 有一些东西,并且您希望主机 5432
端口映射到 5432
里面 docker.
接下来,如果您能够 运行 该命令,即使容器内没有任何内容正在侦听,这也意味着您主机上的端口可用。这意味着 postgress 也没有在主机上监听 5432
。它可能正在监听一个套接字。您应该尝试在主机
上执行以下命令
psql -h 127.0.0.1
如果您无法使用此连接到主机,则意味着 postgres 数据库绑定到套接字文件而不是 IP。现在你可以练习的选项很少
挂载套接字
docker run -p 8082:80 -p 5432:5432 --name openproject_dev -e SECRET_KEY_BASE=secret -e DATABASE_URL=postgresql://openproject:openproject-dev-password@localhost:5432/openproject_dev \
-v /Users/admin/var/lib/openproject/logs:/var/log/supervisor \
-v : \
-v /Users/admin/var/lib/openproject/static:/var/db/openproject openproject/community:5.0
绑定主机上的 0.0.0.0
如果你不想挂载卷那么你应该将 psql 的绑定地址更改为 0.0.0.0
然后将你的数据库 url 更改为 -e DATABASE_URL=postgresql://openproject:openproject-dev-password@<YOURMACHINEIP>:5432/openproject_dev
运行 在主机网络上
docker run --net host --name openproject_dev -e SECRET_KEY_BASE=secret -e DATABASE_URL=postgresql://openproject:openproject-dev-password@localhost:5432/openproject_dev \
-v /Users/admin/var/lib/openproject/logs:/var/log/supervisor \
-v : \
-v /Users/admin/var/lib/openproject/static:/var/db/openproject openproject/community:5.0
我正在研究如何 运行 使用 docker 打开项目。我正在处理 openproject/docker.
我有 docker 图像 运行 一个外部 postgres 目录。
我现在正在研究如何连接到现有的 运行ning postgresql 实例。
根据官方文档,我使用的命令行看起来没问题。
编辑。添加在缺少的-p.
docker run -p 8082:80 -p 5432:5432 --name openproject_dev -e SECRET_KEY_BASE=secret -e DATABASE_URL=postgresql://openproject:openproject-dev-
password@localhost:5432/openproject_dev \
-v /Users/admin/var/lib/openproject/logs:/var/log/supervisor \
-v /Users/admin/var/lib/openproject/static:/var/db/openproject openproject/community:5.0
我省略了 -d [deamon] 标志,这样我就可以看到任何错误。
创建 docker 容器时,我得到
-----> You're using an external database. Not initializing a local database cluster.
/usr/src/app /usr/src/app
Starting memcached: memcached.
如我所料。 然后我收到关于连接到我不期望的 postgresql 服务器的错误。
...
PG::ConnectionBad: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Cannot assign requested address
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
/usr/local/bundle/gems/activerecord-
4.2.7.1/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `initialize'
我猜初始化容器的脚本期望 postgres 是 运行ning 而不是。您将如何使 docker 容器端口将对 5432 的请求转发到命令行上的主机? ...与 docker 运行 -p 5432:5432 相反...将 docker 容器中的 5432 暴露给主机。
-e DATABASE_URL=postgresql://openproject:openproject-dev-
password@localhost:5432/openproject_dev
添加此 url 时,容器希望 postgres 运行在本地主机上运行,即在其自身中。
如果您在主机上 运行ning postgres,您可以通过在 运行 命令中传递 --network host
让容器与主机共享网络堆栈。在这种情况下,localhost 将引用 postgres 运行ning.
您目前的做法是错误的
docker run -p 8082:80 -p 5432:5432 --name openproject_dev -e SECRET_KEY_BASE=secret -e DATABASE_URL=postgresql://openproject:openproject-dev-password@localhost:5432/openproject_dev \ -v /Users/admin/var/lib/openproject/logs:/var/log/supervisor \ -v /Users/admin/var/lib/openproject/static:/var/db/openproject openproject/community:5.0
当您使用 -p 5432:5432
时,这意味着您希望在该端口上的 docker 内部 运行 有一些东西,并且您希望主机 5432
端口映射到 5432
里面 docker.
接下来,如果您能够 运行 该命令,即使容器内没有任何内容正在侦听,这也意味着您主机上的端口可用。这意味着 postgress 也没有在主机上监听 5432
。它可能正在监听一个套接字。您应该尝试在主机
psql -h 127.0.0.1
如果您无法使用此连接到主机,则意味着 postgres 数据库绑定到套接字文件而不是 IP。现在你可以练习的选项很少
挂载套接字
docker run -p 8082:80 -p 5432:5432 --name openproject_dev -e SECRET_KEY_BASE=secret -e DATABASE_URL=postgresql://openproject:openproject-dev-password@localhost:5432/openproject_dev \ -v /Users/admin/var/lib/openproject/logs:/var/log/supervisor \ -v : \ -v /Users/admin/var/lib/openproject/static:/var/db/openproject openproject/community:5.0
绑定主机上的 0.0.0.0
如果你不想挂载卷那么你应该将 psql 的绑定地址更改为 0.0.0.0
然后将你的数据库 url 更改为 -e DATABASE_URL=postgresql://openproject:openproject-dev-password@<YOURMACHINEIP>:5432/openproject_dev
运行 在主机网络上
docker run --net host --name openproject_dev -e SECRET_KEY_BASE=secret -e DATABASE_URL=postgresql://openproject:openproject-dev-password@localhost:5432/openproject_dev \ -v /Users/admin/var/lib/openproject/logs:/var/log/supervisor \ -v : \ -v /Users/admin/var/lib/openproject/static:/var/db/openproject openproject/community:5.0