127.0.0.1拒绝在docker django中连接

时间:2019-05-27 22:30:58

标签: django docker docker-compose

我正在尝试连接到在docker中运行的django实例。据我所知,我已经打开了正确的端口,并在docker ps中看到端口8000上有tcp,但没有转发到该端口。

阅读了端口上的docker compose文档后,我希望它可以正常工作(我也可以在127.0.0.1:9000上查看pgadmin)。

我的docker撰写:

version: '3'

services:
  postgresql:
    restart: always
    image: postgres:latest
    environment:
      POSTGRES_USER: pguser
      POSTGRES_PASSWORD: pgpassword
      POSTGRES_DB: pgdb

  pgadmin:
    restart: always
    image: dpage/pgadmin4:latest
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@admin.com
      PGADMIN_DEFAULT_PASSWORD: admin
      GUNICORN_THREADS: 4
      PGADMIN_LISTEN_PORT: 9000
    volumes:
      - ./utility/pgadmin4-servers.json:/pgadmin4/servers.json 
    depends_on:
      - postgresql
    ports:
      - "9000:9000"

  app:
    build: .
    environment:
      POSTGRES_DB: pgdb
      POSTGRES_USER: pguser
      POSTGRES_PASSWORD: pgpassword
      POSTGRES_HOST: postgresql
    volumes:
      - .:/code
    ports:
      - "127.0.0.1:8000:8000"
      - "5555:5555"
    depends_on:
      - postgresql
      - pgadmin

我尝试对{app} ports使用以下组合,如建议here

app:
  ...
  ports:
    - "8000"
    - "8000:8000"
    - "127.0.0.1:8000:8000"

但是在尝试访问该网站时我仍然看到This site can’t be reached 127.0.0.1 refused to connect.

我确定这是端口转发问题,并且我的服务器在django中正常转动,因为我可以对容器运行docker Attach,并使用预期的响应卷曲URL。

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

如果在虚拟机中运行docker,则需要通过虚拟机IP地址访问应用程序,并且不使用localhost或127.0.0.1 。尝试获取虚拟机IP。另外,请指定您在哪个平台/环境中安装和运行docker。

答案 1 :(得分:0)

要添加答案,我正在使用以下命令运行应用程序:

docker-compose run app python3 manage.py runserver 0.0.0.0:8000

使用docker-compose运行参数--service-ports可以:

  

启用服务端口并映射到主机的运行命令。

因此,我的最终命令如下所示:

docker-compose run --service-ports app python3 manage.py runserver 0.0.0.0:8000

here上有run上的文档