我是新來的Docker,並試圖做一個演示Rails應用程序。我做了一個dockerfile,看起來像這樣:ERR_CONNECTION_REFUSED由碼頭集裝箱
FROM ruby:2.2
# Install apt based dependencies required to run Rails as
# well as RubyGems. As the Ruby image itself is based on a
# Debian image, we use apt-get to install those.
RUN apt-get update && apt-get install -y \
build-essential \
nodejs
# Configure the main working directory. This is the base
# directory used in any further RUN, COPY, and ENTRYPOINT
# commands.
RUN mkdir -p /app
WORKDIR /app
# Copy the Gemfile as well as the Gemfile.lock and install
# the RubyGems. This is a separate step so the dependencies
# will be cached unless changes to one of those two files
# are made.
COPY Gemfile Gemfile.lock ./
RUN gem install bundler && bundle install --jobs 20 --retry 5
# Copy the main application.
COPY . ./
# Expose port 3000 to the Docker host, so we can access it
# from the outside.
EXPOSE 3000
# The main command to run when the container starts. Also
# tell the Rails dev server to bind to all interfaces by
# default.
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
然後我建立了它(沒有錯誤):
docker build -t demo .
,然後運行它(也無錯誤):
docker run -itP demo
=> Booting Puma
=> Rails 5.1.1 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.8.2 (ruby 2.2.7-p470), codename: Sassy Salamander
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:9292
Use Ctrl-C to stop
當我在一個單獨的終端運行一個docker ps
命令來確定端口,我得到:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
55e8224f7c15 demo "bundle exec rails..." About an hour ago Up About an hour 0.0.0.0:32772->3000/tcp ecstatic_bohr
但是,當我嘗試使用Chrome或通過curl命令連接到http://localhost:32772
或http://192.168.99.100:32772
時,我收到「連接被拒絕」。
當我通過bundle exec rails server
命令在我的本地計算機上的泊塢窗外運行應用程序時,它工作正常。請注意,我在我的Win7機器上使用Docker Toolbox
我該做什麼錯?
您公開端口3000,但您試圖達到32772? –
我在容器中暴露3000,然後從我收集的內容(至少每個「0.0.0.0:32772->3000/tcp」通過「docker ps」顯示)映射到我的本地主機上的32772) – Donald
我通常使用碼頭工人與我的碼頭文件一起撰寫,以確保事物以自動和一致的方式進行設置。在您的dockerfile中,您將使用「ports」選項並執行類似端口的操作:「8000:8000」left 8000是docker host,右邊是8000 docker container。 – bkunzi01