看来我的问题不是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
有人可以指出我做错了什么,我知道我必须要接近:(
答案 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