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

我试图dockerize一个Python应用程序,我一直在这个教程 。 本教程是从2015年4月起,仍然使用Docker Machine,从这个答案来看,不再需要在Windows上本地运行Docker容器。

我之前和Docker Machine一起工作,并且能够看到Web应用程序并与之交互。 但是现在我试图在没有Docker Machine的情况下使用Docker版本17.06.0-ce,在Windows 10上构build02c1d87。

这里是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容器中的Web应用程序?

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 

只是改变:

 expose: - "8000" 

通过

 ports: - "8000:8000" 

顺便说一句http:// localhost:80不工作?

问候

结果如卡洛斯和200_OK所build议的那样,他们的回答和评论是按照预期工作的 – 它在80港口运行,而不是8000