我有一個簡單的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
8080:8080告訴碼頭將容器中的8080暴露給本地機器上的8080。嘗試將其更改爲3000:8080,此時它將從主機連接3000到碼頭集裝箱上的8080。 – bkunzi01