使用Docker-i化nodejs應用程序,我試圖設置它,以便它將響應非標準端口,避免已經運行本地Redis容器或服務的團隊成員發生潛在衝突。如何爲Redis/RethinkDB指定備用公開端口(使用Docker Compose)?
Redis通常在6379上運行(不管是泊塢窗還是沒有)。我希望它在6380上聽。即使我沒有在docker-compose文件中,我也想用RethinkDB做同樣的事情。
我不想爲EitherER Redis或RethinkDB創建一個新的Dockerfile。
這是我的Docker-Compose文件。
nodejsapp:
image: some-node-container
container_name: nodejsapp
ports:
- "5200:5200" #first number must match CHEAPOTLE_PORT env variable for the cheapotle service
depends_on:
- redis
- rethinkdb
volumes:
- ./:/app
environment:
- NODEJSAPP_PORT=5200 #must match first port number for cheapotle service above.
- REDIS_PORT=6380 #must match first number in redis service ->ports below.
- RETHINKDB_PORT=28016 #must match first number in redis service ->ports below.
redis:
image: redis:3.2-alpine
container_name: redis_cheapotle
ports:
- "6380:6379"
expose:
- "6380" # must match alternate "first" port above to avoid collisions
rethinkdb:
image: rethinkdb
container_name: rethinkdb_cheapotle
ports:
- "28016:28015" #The first number needs to match the RETHINKDB_PORT in environment variables for cheapotle above. You must change both or none, they must always be the same.
- "8090:8080" #this is where you will access the RethinkDB admin. If you have something on 8090, change the port to 8091:8080
expose:
- "28016" # must match alternate "first" port above to avoid collisions
做了幾個dockerizations後,我以爲這會很容易。我會設置我的環境變量,在我的JS文件中使用proces.env.whatever,然後出門,然後進入下一個。
錯誤。
雖然我可以在0.0.0.0:8090(通知 8090備用端口)獲取到RethinkDB管理區,沒有我的容器可以互相交談 在他們指定的端口。
起初,我嘗試了上面沒有YAML的'暴露'部分,但我得到了與'揭露'YAML補充相同的結果。
看起來docker /容器拒絕將進入Host-> Alternate Port的流量轉發到Container-> Standard Port。我做了一些Google搜索,並且在前20分鐘沒有找到任何東西,所以我想我會在繼續搜索時發佈這些內容。
如果我在過程中發現它,我會發佈一個答案。
嘿@mass感謝您的答覆。 我正在嘗試避免使用鏈接,因爲它們已被折舊以支持網絡。在泊塢窗,撰寫文件中的所有容器現在加入當堆棧被帶到現場所以在這個搬運工,撰寫文件的容器已經可以互相交談時創建的默認網絡(他們不能相互交談與備用端口指定...除了rethinkDB管理員在8090:8080) – Necevil
我認爲你的意思是'--link'標誌,這是不同的。請參閱https://forums.docker.com/t/are-links-deprecated-in-docker-compose/27348。 'links'在撰寫然而,在撰寫第3版,而不是過時但至少:) https://docs.docker.com/compose/compose-file/compose-versioning/ – mass
不知道有一個差別,但這裏的問題與集裝箱看不到對方的能力無關。他們可以看到對方,當端口設置爲標準rethinkdb 28015和Redis的6379.只有當我試圖更改轉發到我遇到問題的集裝箱港口的主機端口說話沒問題。 – Necevil