Docker - Не удалось подключиться к локальному порту 4000: соединение отклонено

Привет, я очень новичок в Docker, я пытаюсь познакомиться с Docker, следуя инструкциям на официальном сайте. Теперь я застрял во второй части руководства (где вы можете проверить ссылку здесь => https://docs.docker.com/get-started/part2/).

У меня есть пример кода приложения, Dockerfile и require.txt точно такой же, как официальный урок

$ ls
app.py  Dockerfile  requriements.txt

Мой Dockerfile выглядит так

FROM python:2.7-slim
WORKDIR /app
ADD . /app
RUN pip install -r requriements.txt
EXPOSE 80
ENV NAME World
CMD ["python", "app.py"]

Все 3 файла имеют содержимое файла / код точно так же, как и учебник. Я смог построить реестр изображений с помощью этой команды

$ docker build -t friendlyhello .

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

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED
friendlyhello       latest              82b8a0b52e91        39 minutes ago
python              2.7-slim            1c7128a655f6        5 days ago
hello-world         latest              48b5124b2768        4 months ago

Затем я запустил приложение в соответствии с официальным руководством с этой командой

$ docker run -d -p 4000:80 friendlyhello
c1893f7eea9f1b708f639653b8eba20733d8a45d3812b442bc295b43c6c7dd5c

Изменить: это мой контейнер после запуска выше команды

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS
c1893f7eea9f        friendlyhello       "python app.py"     15 minutes ago      Up 16 minutes

И официальный учебник помогает читателям взглянуть на http://localhost:4000 как они уже наметили машинный порт 4000 в контейнерный порт 80

К сожалению, я не смог получить ответ от этого URL.

$ curl http://localhost:4000
curl: (7) Failed to connect to localhost port 4000: Connection refused

Я новичок и понятия не имею, что делать.... Как я могу заставить его работать? Заранее спасибо за любой ответ.

Редактировать: я сделал, как предложил @johnharris85. Ниже вывод

$ curl http://$(echo docker-machine ip default):4000
curl: (6) Couldn't resolve host 'docker-machine'
curl: (6) Couldn't resolve host 'ip'
curl: (6) Couldn't resolve host 'default'

Кажется, это тоже не работает.

Редактировать: @johnharris85 исправил свое предложение и @user8023051 прояснил, откуда взялась эта команда и что происходит под капотом. Сейчас работает:) Спасибо

$ curl http://$(docker-machine ip default):4000
<h3>Hello World!</h3><b>Hostname:</b> c1893f7eea9f<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>

3 ответа

Решение

Я не очень знаком с Docker, но, похоже, ваша установка такова, что ваш экземпляр Docker работает на виртуальной машине, и вы пытаетесь получить доступ к приложению, привязанному к localhost (vm), с вашего компьютера с Windows. Причина, по которой вы получите отказ от curl, заключается в том, что на самом деле ничто не прослушивает порт 4000 на хосте (Windows).

Попробуйте найти IP-адрес, который использует ваш экземпляр Docker:

$ docker-machine ip default

Теперь, когда вы знаете IP-адрес, попробуйте снова. Вы даже можете оценить его внутри команды следующим образом:

$ curl http://$(docker-machine ip default):4000

Если вы запускаете докер на Mac и пытаетесь подключиться к вашим зависимостям (postgres и т. д.) с помощью localhost, замените localhost на docker.for.mac.localhost

Вы используете порт 9089 в конфигурации докера, но ваша программа или сервер работают на другом порту. Чтобы проверить порт для xampp, вы можете использовать метод ниже или попробуйте поискать в Google, чтобы проверить номер порта:

Перейдите на панель управления xampp и посмотрите номер порта под изображением. Я отметил этот красный цвет. В моем случае номер порта 80

введите описание изображения здесь

Экземпляр докера не работает на вашем локальном компьютере, а не на докере. Вы можете использовать docker-machine ssh войдите в систему, а затем curl "localhost:6666" на докер-машине.

Другие вопросы по тегам