首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Docker教程中拒绝连接开始第4部分

在Docker教程中拒绝连接开始第4部分
EN

Stack Overflow用户
提问于 2018-11-23 18:10:43
回答 2查看 1.4K关注 0票数 4

我不明白我错过了什么。

docker.compose.yml

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
# 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

代码语言:javascript
运行
复制
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)

我在ubuntu 18上,带着简历盒。

这是vm

代码语言:javascript
运行
复制
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
myvm1   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.0   

requirements.txt

代码语言:javascript
运行
复制
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

码头机ssh myvm1

代码语言:javascript
运行
复制
docker swarm init --advertise-addr 192.168.99.101:2377 getStartNow 

码头机ssh myvm2

代码语言:javascript
运行
复制
docker swarm join --token SWMTKN-1-29dkoqd6tskoqszzrdpcnw0nbmrgbrw9xr27yoxtvapodk6qmg-3tv01eh1ts0n97s5c5zq7q4ju 192.168.99.100:2377

码头机ssh myvm1

代码语言:javascript
运行
复制
 docker stack deploy -c docker.compose.yml getStartNow

码头堆叠ls

代码语言:javascript
运行
复制
NAME                SERVICES            ORCHESTRATOR
getStartNow         2                   Swarm

码头服务

代码语言:javascript
运行
复制
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

这是我的问题

卷曲http://192.168.99.100:80

代码语言:javascript
运行
复制
 curl: (7) Failed to connect to 192.168.99.100 port 80: Connection refused

卷曲http://192.168.99.100:8080

代码语言:javascript
运行
复制
 curl: (7) Failed to connect to 192.168.99.100 port 8080: Connection refused
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-24 23:18:50

我也有同样的问题。我跟踪了Elavaud解决方案这里,它对我有效。

所以:

  1. 我从这里下载了这里
  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

在我的例子中,路径是~/下载/引导2docker.iso,所以我这样做了。

代码语言:javascript
运行
复制
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. 重新开始--第4部分

最后想一想,我看到您的docker-come.yml不同于在get_started part3中创建的docker-come.yml。我不知道这是不是问题所在。在我的例子中,我在get_started part3中使用了相同的docker-compose.yml,所以当我访问我的应用程序时,我使用了端口4000。

代码语言:javascript
运行
复制
curl http://192.168.99.101:4000/
票数 7
EN

Stack Overflow用户

发布于 2019-03-29 03:16:48

我也遇到了这个问题,但找到了一个稍微简单一些的解决方案;与其下载boot2docker并在您的计算机上指向它,您还可以将virtualbox-boot2docker-url标志设置为降级版本的url;例如:

代码语言:javascript
运行
复制
docker-machine create myvm1 --virtualbox-boot2docker-url "https://github.com/boot2docker/boot2docker/releases/download/v18.06.1-ce/boot2docker.iso"
代码语言:javascript
运行
复制
docker-machine create myvm2 --virtualbox-boot2docker-url "https://github.com/boot2docker/boot2docker/releases/download/v18.06.1-ce/boot2docker.iso"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53451285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档