为什么我无法连接到Windows 10上的本地docker-compose容器?

时间:2017-07-16 03:33:32

标签: docker docker-compose dockerfile

我正在尝试将Python应用程序停靠,我一直关注this tutorial。该教程从2015年4月开始,仍然使用Docker Machine,从this answer开始,不再需要在Windows上本地运行Docker容器。

之前我使用过Docker Machine,并且能够看到网络应用并与之互动。但是现在我试图在没有Docker Machine的情况下使用Docker版本17.06.0-ce,在Windows 10上构建02c1d87。

这是docker-compose.yml

web:
  restart: always
  build: ./web
  expose:
    - "8000"
  links:
    - postgres:postgres
  volumes:
    - /usr/src/app/static
  env_file: .env
  command: /usr/local/bin/gunicorn -w 2 -b :8000 app:app

nginx:
  restart: always
  build: ./nginx/
  ports:
    - "80:80"
  volumes:
    - /www/static
  volumes_from:
    - web
  links:
    - web:web

data:
  image: postgres:latest
  volumes:
    - /var/lib/postgresql
  command: "true"

postgres:
  restart: always
  image: postgres:latest
  volumes_from:
    - data
  ports:
    - "5432:5432"

我启动了容器:

$ docker-compose up -d
Creating polly_data_1 ...
Creating polly_data_1 ... done
Creating polly_postgres_1 ...
Creating polly_postgres_1 ... done
Creating polly_web_1 ...
Creating polly_web_1 ... done
Creating polly_nginx_1 ...
Creating polly_nginx_1 ... done

然后,当我运行docker ps时,它显示以下三个容器正在运行:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
9b2c1048f3a5        polly_nginx         "/usr/sbin/nginx"        4 seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp       polly_nginx_1
d561ac5b901a        polly_web           "/usr/local/bin/gu..."   5 seconds ago       Up 4 seconds        8000/tcp                 polly_web_1
ecb029d6ec3a        postgres:latest     "docker-entrypoint..."   7 seconds ago       Up 5 seconds        0.0.0.0:5432->5432/tcp   polly_postgres_1

(此时,导航到Chrome中的http://localhost:8000/已经产生了ERR_CONNECTION_REFUSED。)

然后根据教程(额外//运行脚本来设置数据库,因为我在Windows 10上使用Git Bash):

$ docker-compose run web ///usr/local/bin/python create_db.py
Starting polly_data_1 ...
Starting polly_data_1 ... done
Starting polly_postgres_1 ... done

现在,当我运行docker ps时,它会显示以下四个容器正在运行:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                    NAMES
a129c12f5982        polly_web           "//usr/local/bin/p..."   5 seconds ago       Up Less than a second   8000/tcp                 polly_web_run_1
9b2c1048f3a5        polly_nginx         "/usr/sbin/nginx"        16 seconds ago      Up 15 seconds           0.0.0.0:80->80/tcp       polly_nginx_1
d561ac5b901a        polly_web           "/usr/local/bin/gu..."   17 seconds ago      Up 16 seconds           8000/tcp                 polly_web_1
ecb029d6ec3a        postgres:latest     "docker-entrypoint..."   19 seconds ago      Up 17 seconds           0.0.0.0:5432->5432/tcp   polly_postgres_1

localhost:8000仍然拒绝连接。 Web容器暴露了端口8000,所以我不知道为什么我无法连接它。

如何让这个工作正常,以便我可以在本地访问web容器中的网络应用程序?

3 个答案:

答案 0 :(得分:1)

Web在容器内部公开端口8000。但该端口未映射到主机端口。

我认为问题在于你的命令。该选项为-p,而非-b

web:
  restart: always
  build: ./web
  expose:
    - "8000"
  links:
    - postgres:postgres
  volumes:
    - /usr/src/app/static
  env_file: .env
  command: /usr/local/bin/gunicorn -w 2 -p :8000 app:app

答案 1 :(得分:1)

只需改变:

expose:
  - "8000"

通过

ports:
  - "8000:8000"

顺便说一句http://localhost:80无效?

问候

答案 2 :(得分:0)

原来,正如Carlos和200_OK所建议的那样,他们的答案和评论的一部分,它按预期工作 - 它在端口80运行,而不是8000