Открытый и назначенный порт в Docker Desktop для Mac OS иногда возвращает пустой ответ на хосте - PullRequest
0 голосов
/ 25 октября 2019

У меня Dockerfile выглядит следующим образом:

$ cat Dockerfile 
FROM node

RUN npx degit sveltejs/template svelte-login-form
WORKDIR svelte-login-form
RUN pwd
RUN npm install
EXPOSE 5000
ENTRYPOINT ["npm", "run", "dev"]

Я могу собрать его и запустить как контейнер:

$ docker build -t example-for-port-mapping .
Sending build context to Docker daemon  8.192kB
Step 1/7 : FROM node
 ---> 4ac0e1872789
Step 2/7 : RUN npx degit sveltejs/template svelte-login-form
 ---> Using cache
 ---> c3c9e0ff2612
Step 3/7 : WORKDIR svelte-login-form
 ---> Using cache
 ---> ba9cc2ea671c
Step 4/7 : RUN pwd
 ---> Using cache
 ---> cce7a5f9e8fa
Step 5/7 : RUN npm install
 ---> Using cache
 ---> 864e37465ec8
Step 6/7 : EXPOSE 5000
 ---> Using cache
 ---> 6984ebf0de18
Step 7/7 : ENTRYPOINT ["npm", "run", "dev"]
 ---> Using cache
 ---> e4a92c7c1da5
Successfully built e4a92c7c1da5
Successfully tagged example-for-port-mapping:latest

$ docker run --rm -p 5000 -d example-for-port-mapping
7ee5af59b7fd45f8b839520a88fa34fe99992365a78579f19bf2b62924279676

$ docker ps
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS                     NAMES
7ee5af59b7fd        example-for-port-mapping   "npm run dev"            5 seconds ago       Up 4 seconds        0.0.0.0:32792->5000/tcp   jovial_chatterjee

Как и ожидалось, я могу получить доступ к порту 5000 внутри контейнера:

$ docker exec jovial_chatterjee /bin/bash -c 'curl http://localhost:5000'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   355  100   355    0     0  14961      0 --:--:-- --:--:-- --:--:-- 15434
<!doctype html>
<html>
<head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width'>

    <title>Svelte app</title>

    <link rel='icon' type='image/png' href='/favicon.png'>
    <link rel='stylesheet' href='/global.css'>
    <link rel='stylesheet' href='/bundle.css'>

    <script defer src='/bundle.js'></script>
</head>

<body>
</body>
</html>

Поскольку в моем примере порт 5000 сопоставлен с портом 32792, я ожидаю того же результата при локальном доступе к порту 32792, но я получаю пустой ответ:

$ curl  http://0.0.0.0:32792
curl: (52) Empty reply from server

Как я могу отладить это? Я ожидаю увидеть тот же результат на подключенном хост-порту, что и на порту 5000 в контейнере.

В других случаях это прекрасно работает, например:

$ docker run -dit --name my-apache-app -p 80  httpd:2.4
ba81cbafe62b2409abad9c2a428533aa43b00547f5f192080a4c6c96c2794fea

$ docker ps
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS                     NAMES
ba81cbafe62b        httpd:2.4                  "httpd-foreground"       4 seconds ago       Up 3 seconds        0.0.0.0:32794->80/tcp     my-apache-app

$ curl 0.0.0.0:32794
<html><body><h1>It works!</h1></body></html>

Я использую Docker на Mac OS 10.15:

$ docker -v
Docker version 19.03.2, build 6a30dfc

Спасибо!

...