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

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

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

为什么在使用端口8080时我的rails应用程序不能在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。尝试将其更改为8080:3000,此时它将把3000从主机连接到Docker容器上的8080。更多信息在这里:https://www.ctl.io/developers/blog/post/docker-networking-rules/

关于ruby-on-rails - 使用非默认端口在Docker容器中运行Rails应用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44572275/

10-16 05:41