2017-06-15 71 views
0

我有一個簡單的Rails應用程序,它有一個MongoDB後端。我使用Docker Compose在不同的容器中運行rails應用程序和MongoDB。當我使用默認的導軌端口(3000)時,一切運行正常。但是,如果我在端口8080上運行rails應用程序,而不是使用CMD ["rails", "s", "-p", "8080"],並在我的Dockerfile中使用EXPOSE 8080公開端口8080,然後重新構建並推送該映像,則只有MongoDB容器啓動。我還將docker-compose.yml中的端口更改爲8080:8080使用非默認端口在Docker容器中運行Rails應用程序

如果我在端口8080上運行沒有Docker的rails應用程序(rails s -p 8080),它工作正常。

爲什麼我的導軌應用程序在使用端口8080時不能在Docker容器中運行,但在使用端口3000時可以運行?

Dockerfile

FROM ruby:2.3.1 

EXPOSE 3000 

ADD . /code 
WORKDIR /code 
RUN bundle install 

CMD ["rails", "s"] 

泊塢窗,compose.yml

version: '3' 
services: 
    web: 
    image: "<USERNAME>/<REPO>:<TAG_NAME>" 
    build: . 
    ports: 
     - "3000:3000" 
    volumes: 
     - .:/code 
    links: 
     - mongodb 
    environment: 
     - RAILS_ENV=development 
    mongodb: 
    image: "mongo:latest" 
    ports: 
    - "27017:27017" 
    volumes: 
     - .:/data 
    restart: always 
+0

8080:8080告訴碼頭將容器中的8080暴露給本地機器上的8080。嘗試將其更改爲3000:8080,此時它將從主機連接3000到碼頭集裝箱上的8080。 – bkunzi01

回答

1

8080:8080是告訴碼頭工人在容器暴露8080 8080在本地機器上。嘗試將其更改爲8080:3000,此時它將從主機連接3000到碼頭集裝箱上的8080。更多的信息在這裏:https://www.ctl.io/developers/blog/post/docker-networking-rules/

+0

我認爲端口是倒退的。我嘗試將我的'docker-compose.yml'中的端口更改爲'8080:3000',並且一切正常。你可以在你的答案中改變這一點,我會接受嗎? – grizzthedj

+0

對不起,從手機發布!乾杯 – bkunzi01

+1

不用擔心 - 謝謝你的快速回答! – grizzthedj

相關問題