我有一个简单的rails应用程序,它有一个MongoDB后端。我正在使用Docker Compose在单独的容器中运行rails app和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
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
答案 0 :(得分:1)
8080:8080告诉docker将容器中的8080暴露给本地计算机上的8080。尝试将其更改为8080:3000,此时它将从主机连接3000到docker容器上的8080。更多信息:https://www.ctl.io/developers/blog/post/docker-networking-rules/