在Docker环境中使用Consul DNS的Http请求

时间:2017-12-27 16:27:18

标签: node.js docker consul

我有一个非常简单的领事和管理员在我的机器上进行运行。 我可以查询在领事馆注册的服务列表,但我无法使用http拨打其他服务。

docker-compose:

users = firebaseDatabase.getReference("users");
posts = firebaseDatabase.getReference("posts");
comment = firebaseDatabase.getReference("comments");

        comment.child(postId).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (DataSnapshot child : dataSnapshot.getChildren()) {

                Comment comment = child.getValue(Comment.class);

                users.child(comment.getUserId()).addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        User user = dataSnapshot.getValue(User.class);
                        postComments.setUsername(user.getFullName());

                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        onDataLoaded.onFail(databaseError.getMessage());
                    }
                });

                postComments = new PostComments();
                postComments.setCommentId(child.getKey());
                postComments.setComment(comment.getComment());
                postComments.setDate(comment.getDate());


                commentsList.add(postComments);
            }

            onDataLoaded.onSuccess(commentsList);

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            onDataLoaded.onFail(databaseError.getMessage());
        }
    });

我尝试使用axios,但听起来它没有使用配置的DNS。 我再一次设法获得了我的服务列表。所以我可以注册一个服务,我可以使用consul.agent获取服务,DNS解析也可以。但是来电并不起作用。我得到了ENOTFOUND

version: '2.1'

services:

  consul:
    image:  gliderlabs/consul:latest
    command: "agent -server -data-dir /tmp/consul -bootstrap -ui -client=0.0.0.0"
    ports:
    - 8500:8500
    - 8600:8600
    - 8400:8400
    networks:
      app_net:
        ipv4_address: 172.28.0.10

  registrator:
    image: gliderlabs/registrator:latest
    command: "consul://consul:8500"
    depends_on:
    - consul
    volumes:
    - /var/run/docker.sock:/tmp/docker.sock
    networks:
      - app_net

  service1:
    image: solive/service1
    ports:
    - 3000
    depends_on:
    - consul
    - registrator
    networks:
      - app_net

  service2:
    image: solive/service2
    ports:
    - 4000
    depends_on:
    - consul
    - registrator
    networks:
      - app_net

networks:
  app_net:
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16

1 个答案:

答案 0 :(得分:0)

您还没有提到您在Consul中注册的您尝试访问的服务的IP地址是什么。我怀疑registrator没有注册你在app_net网络中预期的ips,这就是为什么它不适合你。如果是这样的话,请检查registrator的文档如何操作已注册的IP地址或使用其他方法向Consul注册服务。