首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用非默认端口在Docker容器中运行Rails应用程序

使用非默认端口在Docker容器中运行Rails应用程序
EN

Stack Overflow用户
提问于 2017-06-15 16:12:00
回答 1查看 1.2K关注 0票数 1

我有一个简单的rails应用程序,它有一个MongoDB后端。我使用Docker在单独的容器中运行rails应用程序和MongoDB。当我使用默认的rails端口( 3000)时,一切正常。

但是,如果我使用CMD ["rails", "s", "-p", "8080"]在端口8080上运行rails应用程序,并在EXPOSE 8080中使用Dockerfile公开端口8080,那么就重新构建并推送映像,只有MongoDB容器才会启动。我还将docker-compose.yml中的端口更改为8080:8080

如果我在端口8080(rails s -p 8080)上运行没有Docker的rails应用程序,它可以正常工作。

为什么我的rails应用程序在使用端口8080时不能在Docker容器中运行,而在使用端口3000时却能工作?

Dockerfile

代码语言:javascript
复制
FROM ruby:2.3.1

EXPOSE 3000

ADD . /code
WORKDIR /code
RUN bundle install

CMD ["rails", "s"]

docker-compose.yml

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-15 16:17:05

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44572275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档