não pode acessar a http: // localhost: 4000 depois de mapear esse número de porta para o docker

5

Esta é a primeira vez que uso o docker. Acabei de seguir as etapas no site do docker: https://docs.docker.com/get-started/part2/#run-the-app Depois que eu concluí todas as etapas, não consigo acessar a http://localhost:4000partir do navegador (essas etapas no link mapeará 80 a 4000 na janela de encaixe) Aqui está a configuração da minha janela de encaixe:

$ docker ps
CONTAINER ID        IMAGE               COMMAND
STATUS              PORTS                  NAMES
d204920463a9        firendlyhello       "python app.py"
Up 6 minutes        0.0.0.0:4000->80/tcp   pensive_bell

Quando eu executo este aplicativo:

liyuan.liu@USEUG-98T5N32 MINGW64 ~/test
$ docker run -p 4000:80 firendlyhello
* Running on http://0.0.0.0:80/ (Press CTRL+C to quit)

Então eu estava tentando abrir http: // localhost: 4000 no meu navegador, mas apenas disse: Este site não pode ser alcançado. Este é o conteúdo do app.py:

liyuan.liu@USEUG-98T5N32 MINGW64 ~/test
$ cat app.py
from flask import Flask
from redis import Redis, RedisError
import os
import socket

# Connect to Redis
redis = Redis(host="redis", db=0)

app = Flask(__name__)

@app.route("/")
def hello():
    try:
        visits = redis.incr('counter')
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv('NAME', "world"), hostname=socket.gethostname(), visits=visits)


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)
beasone
fonte
É possível que o erro de digitação no seu comando esteja causando isso? A imagem docker é "friendlyhello", mas você digitou "firendlyhello"
Myles Keating
Se é por causa do erro de digitação, a linha de comando do docker ainda exibe que está em execução. Se estiver em execução, localhost: 4000 deve funcionar, correto?
beasone
Em primeiro lugar, você pode acessá-lo em http://localhost:80? Que tal http://0.0.0.0:80e http://0.0.0.0:4000?
Thebluefish
Eu tentei localhost: 80 , 0.0.0.0:80 e 0.0.0.0:4000 e 127.0.0.1:4000 , nenhum deles funciona. (site superusuário sempre esconde "http: //" quando eu os digito no comentário ......)
beasone

Respostas:

2

O Docker configura seu próprio endereço IP padrão, que você pode ver sempre que iniciar o Terminal de início rápido do Docker.

Em vez de http://localhost:4000,type http://[IP address:4000]

Você também pode usar este comando para encontrar o IP que o Docker configurou:

docker-machine ip default
Richard
fonte