Docker教程上的连接被拒绝入门第4部分 [英] Connection refused on Docker tutorial get started part 4

查看:192
本文介绍了Docker教程上的连接被拒绝入门第4部分的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不明白自己错过了什么。



docker.compose.yml

 版本: 3 
服务:
网站:
#用您的名称和图片详细信息替换用户名/存储库:
图片:sve​​zday / friendlyhello:第1部分
部署:
副本:5
restart_policy:
条件:失败
资源:
限制:
cpus: 0.1
内存:50M
端口:
- 80:80
网络:
-网站
可视化工具:
图像:dockersamples / visualizer:稳定的
端口:
- 8080:8080
数量:
- /var/run/docker.sock:/var/run/docker.sock
部署:
放置:
约束:[node.role ==管理器]
网络:
-网络net
网络:
网络:

Dockerfile

 #使用官方Python运行时作为父映像
F ROM python:2.7-slim

#将工作目录设置为/ app
WORKDIR / app

#将当前目录内容复制到/ app $的容器中b $ b COPY。 / app

#安装requirements.txt
中指定的所有必需软件包RUN pip install --trusted-host pypi.python.org -r requirements.txt

#使端口80在该容器外部的世界可用
EXPOSE 80

#定义环境变量
ENV名称世界

#在运行app.py时容器启动
CMD [ python, app.py]

app。 py

 从flask导入烧瓶
从redis导入Redis,RedisError
导入os
导入socket

#连接到Redis
redis = Redis(host = redis,db = 0,socket_connect_timeout = 2,socket_timeout = 2)

app = Flask (__name__)

@ app.route( /)
def hello():
试试:
访问= redis.incr( counter)
,除了RedisError:
visits =< i>无法连接到Redis,计数器已禁用< / i>

html =< h3>你好{name}!< / h3> < b>主机名:< / b> {hostname}< br /> < b>访问:< / b> {访问}
返回html.format(name = os.getenv( NAME, world),hostname = socket.gethostname(),visits =访问次数)

如果__name__ == __main__:
app.run(host ='0.0.0.0',port = 80)

我在ubuntu 18上,带有vitualbox。



这是虚拟机

 名称活动的驱动程序状态URL群集DOCKER错误
myvm1 * virtualbox运行tcp://192.168.99.100:2376 v18.09.0

requirements.txt

  Flask 
Redis
myvm2-virtualbox正在运行tcp://192.168.99.101:2376未知无法查询docker版本:获取https://192.168.99.101:2376/v1.15/version :x509:证书对192.168.99.103有效,而不对192.168.99.101有效

docker-machine ssh myvm1

  docker swarm init --advertise-addr 192.168 .99.101:2377 getStartNow 

docker-machine ssh myvm2

  docker swarm join --token SWMTKN-1-29dkoqd6tskoqszzrdpcnw0nbmrgbrw9xr27yoxtvapodk6qmg-3tv01eh1ts0n97s5c5zq7q4ju 192.168.99.100:2377 $ b $ p>  

docker-machine ssh myvm1

  docker stack deploy -c docker.compose.yml getStartNow 

docker stack ls

  NAME服务协调者
getStartNow 2群

docker service ls

  ID名称模式副本图像端口
w9l0khipey4v getStartNow_visualizer复制了1/1 dockersamples / visualizer:stable *:8080-> 8080 / tcp
3yoifm7inujf getStartNow_web已复制5/5 svezday / friendlyhello:part-1 *:80-> 80 / tcp

这是我的问题



curl http://192.168.99.100:80

  curl:(7)无法连接到192.168.99.100端口80:连接被拒绝

卷曲 http://192.168。 99.100:8080

  curl:(7)无法连接到192.168.99.100端口8080:连接被拒绝


解决方案

我遇到了同样的问题。
我遵循了Elavaud解决方案在这里,它对我有用。


因此:


  1. 我从此处

    下载了boot2docker.iso

  2. 检查活动的虚拟机


    docker-machine ls



  3. 销毁所有虚拟机(myvm1和myvm2)


    docker -machine rm $(docker-machine ls -q)



  4. 再次创建指定路径的虚拟机下载的boot2docker.iso



docker-machine create --driver virtualbox --virtualbox -boot2docker-url path_to_your_boot2docker.iso virtual_machine_name


在我的情况下,路径为〜/ Downloads / boot2docker.iso,所以我这样做了

  docker-机器创建--driver virtualbox --virtualbox-boot2docker-url〜/ Downloads / boot2docker.iso myvm1 

docker-machine create --driver virtualbox --virtualbox-boot2docker-url〜/ Downloads / boot2docker。 iso myvm2



  1. 重新开始,开始第四部分

最后,我看到您的docker-compose.yml与在get_started part3中创建的docker-compose.yml不同。我不知道这可能是问题。
在我的情况下,我在get_started part3中使用了相同的docker-compose.yml,因此当我访问我的应用程序时,我使用端口4000

 卷曲http://192.168.99.101:4000/ 


I don't understand what I missed.

docker.compose.yml

version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: svezday/friendlyhello:part-1
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "80:80"
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
networks:
  webnet:

Dockerfile

# Use an official Python runtime as a parent image
FROM python:2.7-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]

app.py

from flask import Flask
from redis import Redis, RedisError
import os
import socket

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

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)

I'm on ubuntu 18, with vitualbox.

This is the vm

NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
myvm1   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.0   

requirements.txt

Flask
Redis
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           Unknown    Unable to query docker version: Get https://192.168.99.101:2376/v1.15/version: x509: certificate is valid for 192.168.99.103, not 192.168.99.101

docker-machine ssh myvm1

docker swarm init --advertise-addr 192.168.99.101:2377 getStartNow 

docker-machine ssh myvm2

docker swarm join --token SWMTKN-1-29dkoqd6tskoqszzrdpcnw0nbmrgbrw9xr27yoxtvapodk6qmg-3tv01eh1ts0n97s5c5zq7q4ju 192.168.99.100:2377

docker-machine ssh myvm1

 docker stack deploy -c docker.compose.yml getStartNow

docker stack ls

NAME                SERVICES            ORCHESTRATOR
getStartNow         2                   Swarm

docker service ls

ID                  NAME                     MODE                REPLICAS            IMAGE                             PORTS
w9l0khipey4v        getStartNow_visualizer   replicated          1/1                 dockersamples/visualizer:stable   *:8080->8080/tcp
3yoifm7inujf        getStartNow_web          replicated          5/5                 svezday/friendlyhello:part-1      *:80->80/tcp

AND HERE IS MY PROBLEM

curl http://192.168.99.100:80

 curl: (7) Failed to connect to 192.168.99.100 port 80: Connection refused

curl http://192.168.99.100:8080

 curl: (7) Failed to connect to 192.168.99.100 port 8080: Connection refused

解决方案

I had the same problem. I followed Elavaud solution here and it worked for me.

So:

  1. I downloaded boot2docker.iso from here

  2. Check active virtual-machine

    docker-machine ls

  3. destroy all virtual machines (myvm1 and myvm2)

    docker-machine rm $(docker-machine ls -q)

  4. Create again the virtual-machines specifying the path of your downloaded boot2docker.iso

docker-machine create --driver virtualbox --virtualbox-boot2docker-url path_to_your_boot2docker.iso virtual_machine_name

In my case the path was ~/Downloads/boot2docker.iso so i did

docker-machine create --driver virtualbox --virtualbox-boot2docker-url ~/Downloads/boot2docker.iso myvm1

docker-machine create --driver virtualbox --virtualbox-boot2docker-url ~/Downloads/boot2docker.iso myvm2

  1. Start again get started part-4

Last think, I saw your docker-compose.yml is differente from docker-compose.yml created in get_started part3. I don't know if that could be the problem. In my case I used the same docker-compose.yml in get_started part3, so when I access to my app i use the port 4000

curl http://192.168.99.101:4000/

这篇关于Docker教程上的连接被拒绝入门第4部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆