簡體   English   中英

如何從docker容器向主機發送tcp / ip請求?

[英]How do you send tcp/ip requests from a docker container to the host?

我正在研究如何使用docker運行openproject。 我正在通過openproject / docker工作。

我已經使用外部postgres目錄運行docker鏡像。

我現在正在研究如何連接到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正在運行而事實並非如此。 您如何使docker容器端口在命令行上將請求轉發5432到主機? ...與docker相反運行-p 5432:5432 ...它將5432從docker容器暴露給主機。

-e DATABASE_URL=postgresql://openproject:openproject-dev-
password@localhost:5432/openproject_dev

當你添加這個url時,容器期望postgres在localhost上運行,即本身。

如果您在主機上運行postgres,則可以通過在run命令中傳遞--network host來讓容器與主機共享網絡堆棧。 在這種情況下,localhost將引用運行postgres的主機。

你的方法目前是錯誤的

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內的5432

接下來,如果您能夠運行該命令,即使沒有任何內容正在容器中偵聽,那么這意味着主機上的端口可用。 這意味着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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM