无法连接到包含Ruby API的docker容器/映像

时间:2018-03-24 21:47:22

标签: ruby docker

编辑:

看来我的问题不是Docker,我的主机或正在运行的应用程序的问题,从我的容器中我能够卷曲localhost:9292并从我的应用程序获得API响应,发生的事情是我的{我的Dockerfile中的{1}}语句没有暴露我的基本映像(Debian)中的端口

这是我第一次构建自己的容器,我有一个Grape API,我已经变成了一个docker镜像,不幸的是,当我运行它时,似乎无法通过IP地址/端口连接到它

EXPOSE

这成功构建了一个几乎可用的图像

#Dockerfile
FROM ruby:2.4.1

RUN apt-get update -y && apt-get upgrade -y
RUN gem install rubygems-update --no-ri --no-rdoc

ENV WD /app

RUN mkdir $WD

ADD . $WD

WORKDIR $WD

RUN bundle install

EXPOSE 9292

CMD ["bundle", "exec", "rackup"] # defaults to 9292

我通过从命令行运行它来启动我的应用程序

aronlilland:receiving_log_api (master)$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             
SIZE
receiving_log_api   latest              25061200fe6e        11 seconds ago      1.08GB
ruby                2.4.1               e7ca4a0b5b6d        6 months ago        684MB

我尝试过将IP地址绑定到0.0.0.0 aronlilland:receiving_log_api (master)$ docker run -p 9292:9292 receiving_log_api bundle exec rackup -p 9292 Puma starting in single mode... * Version 3.10.0 (ruby 2.4.1-p111), codename: Russell's Teapot * Min threads: 0, max threads: 16 * Environment: development * Listening on tcp://localhost:9292 Use Ctrl-C to stop

docker run -p 9292:9292 receiving_log_api bundle exec rackup -p 9292 --host 0.0.0.0表示应用程序正在指定的端口上运行,除非我尝试从我的浏览器或API实用程序连接到它,它会响应该IP地址和端口上没有运行任何内容,我已经尝试{ {1}} docker ps localhost:9292

127.22.10.11:9292

有人可以指出我做错了什么,我知道我必须要接近:(

1 个答案:

答案 0 :(得分:0)

问题是您没有公开Dockerfile中的端口。添加

在CMD之前的Dockerfile中

EXPOSE 8383

例如:

    #rest of the dockerfile
    RUN bundle install
    EXPOSE 8383
    CMD bundle exec rackup # defaults to 9292

当您运行容器时,请执行docker run -p9292:9292 <container name/id>。您可以更改默认端口并将其公开而不是9292,也可以在通过-d的守护进程模式下运行。

了解更多信息https://docs.docker.com/engine/reference/builder/#expose