Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 从Docker运行命令运行时,Docker compose中的图像未按预期工作_Spring_Spring Boot_Docker_Docker Compose_Microservices - Fatal编程技术网

Spring 从Docker运行命令运行时,Docker compose中的图像未按预期工作

Spring 从Docker运行命令运行时,Docker compose中的图像未按预期工作,spring,spring-boot,docker,docker-compose,microservices,Spring,Spring Boot,Docker,Docker Compose,Microservices,我使用SpringBoot构建了一些微服务,它们是 服务发现 网关服务器或Zuul代理服务器 服务RESTAPI的后端应用程序 以下是docker-compose.yml文件的一部分 version: '3.7' services: st-service-registry: build: context: service-registry/ args: VERSION: ${VERSION} restart: on-failure

我使用SpringBoot构建了一些微服务,它们是

  • 服务发现
  • 网关服务器或Zuul代理服务器
  • 服务RESTAPI的后端应用程序
以下是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-p8080:8080\u image\u Id\u运行单个映像时,
微服务无法连接到服务注册表。它说,连接被拒绝


你们有线索吗?如果您需要任何其他信息,请告诉我。提前感谢。

必须更正以下属性:

   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    
尝试将要生成的所有容器的
--name设置为容器名称,将--hostname设置为容器名称

关键是当您手动创建容器时—它将设置自动生成的容器名称或主机名

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

例如:

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}

谢谢您的回答,但是当我使用docker compose时,这个eureka.client.serviceUrl.defaultZone运行良好。我遇到的问题是当我手动运行每个容器时。感谢您的回答,让我试试这个。我仍然有相同的问题,它仍然说连接被拒绝:(尝试执行以下命令以查看计算机是否可访问。
docker-run--rm-st/backend:$VERSION-ping-st-service-registry
我尝试了
docker-run--rm-st/backend:$VERSION-ping-st-service-registry
仍然拒绝相同的连接。请访问聊天区。)