我有一个小项目,有一个服务,这是一个rails API:。保存rails API的容器并没有像我希望的那样运行。
这是我的docker-compose.yml
version: '3'
services:
mynab_api:
image: 'myname/my_api:latest'
ports:
- '3001:3001'以下是该服务的Dockerfile:
FROM ruby:2.5.3-alpine3.8
# Minimal requirements to run a Rails app
RUN apk add --no-cache --update build-base \
linux-headers \
git \
sqlite-dev \
nodejs \
tzdata
ENV APP_PATH /usr/src/app
# Different layer for gems installation
WORKDIR $APP_PATH
ADD Gemfile $APP_PATH
ADD Gemfile.lock $APP_PATH
RUN bundle install
# Copy the application into the container
COPY . $APP_PATH
CMD ["bundle", "exec", "rails", "server", "-p", "3001"]当我运行$ docker-compose up时,服务启动并且没有崩溃。如果我运行$ docker-compose ps,服务就启动了。问题是,如果我进入浏览器访问http://localhost:3001,服务似乎关闭了(尽管仍在运行)。
我发现的一个修复方法是将Dockerfile (CMD“捆绑包”、"exec“、"rails”、"server“、"-p”、"3001")中的默认命令替换为
CMD ["bundle", "exec", "rails", "server"]它默认在端口3000上发出。然后在docker-compose.yml中,我将机器上的端口3001映射到容器中的端口3000。
version: '3'
services:
mynab_api:
image: 'myname/my_api:latest'
ports:
- '3001:3000'这个作品找到了。为什么第一个版本不能工作?
编辑:这是telnet提供的功能
-> % telnet localhost 3001
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.发布于 2018-12-28 11:00:05
首先,您可以如下所示修改您的docker-compose.yml,以在屏幕上查看服务器输出:
version: '3'
services:
mynab_api:
image: 'myname/my_api:latest'
ports:
- '3001:3001'
tty: true您还应该尝试修改Dockerfile中的CMD,如下所示:
CMD ["bundle", "exec", "rails", "server", "-p", "3001", "-b", "0.0.0.0"]如果您运行rails server --help,您将看到以下--binding标志:
Binds Rails to the specified IP - defaults to 'localhost' in development
and '0.0.0.0' in other environments'您会发现,在使用docker容器(至少在开发中)或运行虚拟机(Virtualbox或其他)时,需要指定此标志。
发布于 2018-12-27 01:03:43
默认情况下,rails docker容器在3000端口上运行。如果您想在不同的端口上运行,则需要将内部容器端口映射到外部应用程序。就像这样:
ports:
- '3001:3000'发布于 2018-12-28 18:09:58
另一种解决方案是修改config/puma.rb文件中的默认端口。
ENV.fetch("PORT") { 3001 }这样,您就可以在Dockerfile中使用以下命令
CMD ["bundle", "exec", "rails", "server"]https://stackoverflow.com/questions/53934652
复制相似问题