2016-04-23 6 views
17

Я новичок в Docker и пытаюсь сделать демонстрационное приложение Rails. Я сделал dockerfile, который выглядит следующим образом:Соединение отказано в контейнере докера

FROM ruby:2.2 
MAINTAINER [email protected] 

# 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 8080 to the Docker host, so we can access it 
# from the outside. 
EXPOSE 8080 

# 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", "-p", "8080"] 

Затем я построил его, как так:

docker build -t demo . 

И вызвать команду, чтобы запустить сервер, который делает запуск сервера на порт 8080:

Johns-MacBook-Pro:demo johnkealy$ docker run -it demo 
=> Booting WEBrick 
=> Rails 4.2.5 application starting in development on http://0.0.0.0:8080 
=> Run `rails server -h` for more startup options 
=> Ctrl-C to shutdown server 
[2016-04-23 16:50:34] INFO WEBrick 1.3.1 
[2016-04-23 16:50:34] INFO ruby 2.2.4 (2015-12-16) [x86_64-linux] 
[2016-04-23 16:50:34] INFO WEBrick::HTTPServer#start: pid=1 port=8080 

Я затем попытаться найти правильный IP для перехода к:

Johns-MacBook-Pro:demo johnkealy$ docker-machine ip default 
192.168.99.100 

Перейдите к http://192.168.99.100:8080 и получите ошибку. Этот сайт не может быть достигнут. 192.168.99.100 отказался подключиться.

Что я могу делать неправильно?

+0

попытаться запустить контейнер с возможностью публикации. docker run -it demo --publish 8080: 8080 –

+0

спасибо, @jozef, но я получаю «докер»: ошибка ответа от демона: команда контейнера «-publish» не найдена или не существует .. » – jdkealy

ответ

18

Вы должны опубликовать открытые порты, используя следующие параметры:

-P (прописной) или --publish-все, которые говорят Docker использовать случайные порты из вашего хоста и сопоставить их открытые порты контейнера.

-p (нижний регистр) или --publish = [], который позволит Docker использовать порты, которые вы вручную установили, и сопоставить их с портами открытого контейнера.

Второй вариант предпочтительнее, поскольку вы уже знаете, какие порты отображаются. Если вы используете первый вариант, вам нужно будет позвонить docker inspect demo и проверить, какие порты используются с вашего хоста в разделе Порты.

Просто запустите следующую команду:

docker run -it -p 8080:8080 demo 

После того, что ваш URL будет работать.

9

Если вы используете Docker инструментарий на окно 10 дома вам нужно будет получить доступ к веб-страницы с помощью команды Докер-машины IP. Обычно это 192.168.99.100:

Предполагается, что вы работаете с командой публикации, как показано ниже.

docker run -it -p 8080:8080 demo 

с окном 10 про версию вы можете получить доступ с локальным хостом или соответствующим шлейфом 127.0.0.1:8080 и т.д. (Tomcat или что вы хотите). Это связано с тем, что у вас нет виртуального окна, а докер работает непосредственно на Window Hyper V, и loopback напрямую доступен.

Проверьте файл hosts в окне для любого отклонения. Он должен иметь 127.0.0.1, сопоставленный с localhost

+0

Большое спасибо, сэр ! Это экономит мне массу времени! – zsljulius

+0

@ zsljulius хорошо, что это вам помогло. –

Смежные вопросы