从docker run命令运行时,来自Docker的图像无法按预期工作

时间:2019-02-07 10:28:22

标签: spring spring-boot docker docker-compose microservices

我很少有使用Spring Boot构建的微服务,

  • 服务发现
  • 网关服务器或Zuul代理服务器
  • 提供REST API的后端应用程序

以下是docker-compose.yml文件的一部分

version: '3.7'

services:
  st-service-registry:
    build:
      context: service-registry/
      args:
        VERSION: ${VERSION}
    restart: on-failure
    image: st/service-registry:${VERSION}
    container_name: st-service-registry
    ports:
      - 8180:8180
    tty: true
    networks:
      - st-network

  st-backend:
    build:
      context: backend/
      args:
        VERSION: ${VERSION}
    restart: on-failure
    image: st/backend:${VERSION}
    environment:
      eureka.client.serviceUrl.defaultZone: http://st-service-registry:8180/eureka
    depends_on:
      - mongo
      - redis
      - st-service-registry
      - st-gateway-server
    volumes:
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime
    networks:
      - st-network

  st-gateway-server:
    build:
      context: gateway-server/
      args:
        VERSION: ${VERSION}
    restart: on-failure
    image: st/gateway-server:${VERSION}
    container_name: st-gateway-server
    ports:
      - 8080:8080
    depends_on:
      - st-service-registry
    networks:
      - st-network

  mongo:
    image: mongo
    container_name: mongo
    ports:
      - 27017:27017
    volumes:
      - ${MONGO_DB_DATA_LOCATION}:/data/db
    restart: on-failure
    networks:
      - st-network

  redis:
    image: redis
    container_name: redis
    ports:
      - 6379:6379
    restart: on-failure
    networks:
      - st-network

networks:
  st-network:
    driver: bridge

当我使用docker-compose up --build运行整个堆栈时,一切正常。我可以看到docker镜像,并且可以运行微服务和类似的东西。但是,当我尝试使用docker run -itd -p 8080:8080 _image_Id_运行单个映像时,微服务无法连接到服务注册表。它说连接被拒绝

你们在这方面有什么领先吗?让我知道您是否需要其他信息。预先感谢。

2 个答案:

答案 0 :(得分:1)

以下属性必须更正:

   environment:
      EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://st-service-registry:8180/eureka

docker-compose.yml示例

version: '3.7'
services:
  eureka-server:
    image: barathece91/eureka-server-demo
    ports:
      - "8081:8081"
    networks:
      - st-network
  eureka-client-app1:
    image: barathece91/eureka-client-demo
    ports:
      - "8082:8082"
    networks:
      - st-network
    depends_on:
      - eureka-server
    environment:
      EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://eureka-server:8081/eureka    

networks:
  st-network:
    driver: bridge    

答案 1 :(得分:0)

尝试为要生成的所有容器设置--name as container-name and --hostname as container-name

关键是手动创建容器时-它将设置容器名称或主机名自动生成。

服务通过名称(容器名称)互相查询

例如:

docker run -d --name st-service-registry \
              --hostname st-service-registry \
              --network st-network \
              --restart=on-failure \
              -p 8180:8180 \
              st/service-registry:${VERSION}

docker run -d --name redis \
              --hostname redis \
              --network st-network \
              --restart=always \
              -p 6379:6379 \
              redis
docker run -d --name mongo \
              --hostname mongo \
              --network st-network \
              --restart=always \
              -p 27017:27017 \
              mongo

docker run -d --name st-gateway-server \
              --hostname st-gateway-server \
              --network st-network \
              --restart=on-failure \
              -p 8080:8080 \
              st/gateway-server:${VERSION}


docker run -d --name st-service-registry \
              --hostname st-service-registry \
              -e eureka.client.serviceUrl.defaultZone: http://st-service-registry:8180/eureka \
              --network st-network \
              -v /etc/timezone:/etc/timezone \
              -v /etc/localtime:/etc/localtime \
              st/backend:${VERSION}