【问题标题】:Running Rails App in Docker Container using Non-Default Port使用非默认端口在 Docker 容器中运行 Rails 应用程序
【发布时间】: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


【解决方案1】:

8080:8080 告诉 docker 将容器中的 8080 暴露给本地机器上的 8080。尝试将其更改为 8080:3000,此时它将从主机连接 3000 到 docker 容器上的 8080。更多信息在这里:https://www.ctl.io/developers/blog/post/docker-networking-rules/

【讨论】:

  • 我认为端口是向后的。我尝试将docker-compose.yml 中的端口更改为8080:3000,一切正常。你能在你的答案中改变这个,我会接受吗?
  • 抱歉是手机发帖!干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 2019-05-01
  • 2015-03-31
  • 1970-01-01
  • 2021-07-31
  • 2013-01-27
  • 2015-04-09
相关资源
最近更新 更多