【发布时间】:2017-11-18 05:30:10
【问题描述】:
我有一个带有 MongoDB 后端的简单 Rails 应用程序。我正在使用 Docker Compose 在单独的容器中运行 rails 应用程序和 MongoDB。当我使用默认的 rails 端口(即 3000)时,一切运行正常。
但是,如果我在端口 8080 上运行 rails 应用程序,而不是使用 CMD ["rails", "s", "-p", "8080"],并在我的 Dockerfile 中使用 EXPOSE 8080 公开端口 8080,然后重建并推送映像,则只有 MongoDB 容器启动。我还将docker-compose.yml中的端口更改为8080:8080。
如果我在端口 8080(rails s -p 8080) 上运行没有 Docker 的 rails 应用程序,它可以正常工作。
为什么我的 rails 应用程序在使用端口 8080 时不能在 Docker 容器中运行,但在使用端口 3000 时可以运行?
Dockerfile
FROM ruby:2.3.1
EXPOSE 3000
ADD . /code
WORKDIR /code
RUN bundle install
CMD ["rails", "s"]
docker-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 告诉 docker 将容器中的 8080 暴露给本地机器上的 8080。尝试将其更改为 3000:8080,此时它将从主机连接 3000 到 docker 容器上的 8080。
标签: ruby-on-rails docker docker-compose