Docker如何解析属性文件中存在的主机名或IP?

时间:2018-01-22 07:29:42

标签: docker spring-boot mesos marathon

我有2个Spring Boot微服务应用程序,即Web应用程序和Metastore应用程序。这是我的Web应用程序的属性文件。

spring:
  thymeleaf:
    prefix: classpath:/static/
  application:
    name: web-server
  profiles:
     active: native

server:
  port: ${port:8383}

---
host:
  metadata: http://10.**.**.***:5011

用于Web应用程序的Dockerfile:

FROM java:8-jre
MAINTAINER **** <******>
ADD ./ms.console.ivu-ivu.1.0.1.jar /app/
CMD chmod +x /app/*
CMD ["java","-jar", "/app/ms.console.web-web.1.0.1.jar"]
EXPOSE 8383

元数据应用程序的Dockerfile:

FROM java:8-jre
MAINTAINER ******* <********>
ADD config/* /deploy/config/
CMD chmod +x ./deploy/config/*
COPY ./ms.metastore.1.0.1.jar /deploy/
CMD chmod +x ./deploy/ms.metastore.1.0.1.jar
CMD ["java","-jar","./deploy/ms.metastore.1.0.1.jar"]
EXPOSE 5011

我正在使用Mesos和Marathon进行集群管理。 Metastore的Marathon脚本是: -

{
  "id": "/ms-metastore",
  "cmd": null,
  "cpus": 1,
  "mem": 2000,
  "disk": 0,
  "instances": 0,
  "acceptedResourceRoles": [
    "*"
  ],
  "container": {
    "type": "DOCKER",
    "docker": {
      "forcePullImage": true,
      "image": "*****/****:ms-metastore",
      "parameters": [],
      "privileged": true
    },
    "volumes": [],
    "portMappings": [
      {
        "containerPort": 5011,
        "hostPort": 0,
        "labels": {},
        "protocol": "tcp",
        "servicePort": 10000
      }
    ]
  },
  "networks": [
    {
      "mode": "container/bridge"
    }
  ],
  "portDefinitions": [],
  "fetch": [
    {
      "uri": "file:///etc/docker.tar.gz",
      "extract": true,
      "executable": false,
      "cache": false
    }
  ]
}

网络马拉松:

{
  "id": "/ms-console",
  "cmd": null,
  "cpus": 1,
  "mem": 2000,
  "disk": 0,
  "instances": 0,
  "acceptedResourceRoles": [
    "*"
  ],
  "container": {
    "type": "DOCKER",
    "docker": {
      "forcePullImage": true,
      "image": "****/****:ms-console",
      "parameters": [],
      "privileged": true
    },
    "volumes": [],
    "portMappings": [
      {
        "containerPort": 8383,
        "hostPort": 0,
        "labels": {},
        "protocol": "tcp",
        "servicePort": 10000
      }
    ]
  },
  "networks": [
    {
      "mode": "container/bridge"
    }
  ],
  "portDefinitions": [],
  "fetch": [
    {
      "uri": "file:///etc/docker.tar.gz",
      "extract": true,
      "executable": false,
      "cache": false
    }
  ]
}

Web应用程序我使用硬编码的IP连接到Metastore(在属性中提到)。我为两者创建了docker镜像并在我的服务器中运行。 Metastore服务器现在在不同的机器上运行,因此我的Web应用程序无法解析此IP。

1 个答案:

答案 0 :(得分:0)

您需要在此处执行的操作是使用5011公开-p作为在“不同计算机”上运行的元数据服务器上的主机端口 -

docker run -d -p 5011:5011 metadata_image ....

现在,您的Web应用程序应该能够使用http://$different_machine_ip:5011/

访问元数据服务器
  

$ different_machine_ip =元数据服务器IP

然而,由于他们需要紧密耦合,我建议你运行web app&amp;如果您的元数据服务器是无状态的,则在同一台机器上安装元数据服务器。