hazelcast / hazelcast-docker

This repository contains docker image for Hazelcast open-source in-memory data-grid.
Apache License 2.0
90 stars 82 forks source link

Simple multicast in docker without --net:host #39

Closed gregbkr closed 6 years ago

gregbkr commented 7 years ago

Hello Hazelcast team,

I am using your product on 3 of my app so far, very happy with performance during these years! I am now moving to docker and try to migrate. I could make a demo with your basic image running on two separate servers. But when I remove this option --net:host, I am unable to find the right config to make it works. Can you tell me if this setup is possible? I saw many posts with auto discovery in kubernetes, aws, or simple unicast. Is multicast definively not possible on physical host running simple containers (without any service discovery, other that the default HZ multicast)? I am open to options.

My two servers: Clup98:

Clup99:

docker-compose.yml

version: '2'
services:
  hazel:
    container_name: hazel
    image: hazelcast/hazelcast
    ports:
      - "6801:6801"
      - "44327:44327/udp"
    volumes:
      - ./hazelcast.xml:/opt/hazelcast/hazelcast.xml
    #network_mode: "host"
    command: ["sh","-c","/sbin/ip address && ./server.sh"]

hazelcast.xml (Clup98)

<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved.
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<!--
    The default Hazelcast configuration. This is used when no hazelcast.xml is present.
    Please see the schema for how to configure Hazelcast at https://hazelcast.com/schema/config/hazelcast-config-3.8.xsd
    or the documentation at https://hazelcast.org/documentation/
-->
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.8.xsd"
           xmlns="http://www.hazelcast.com/schema/config"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <group>
        <name>dev</name>
        <password>dev-pass</password>
    </group>
    <management-center enabled="false">http://localhost:8081/mancenter</management-center>
    <properties><property name="hazelcast.local.localAddress">172.21.0.2</property></properties>
    <network>
        <public-address>10.109.0.35</public-address>
        <port auto-increment="true" port-count="100">6801</port>
        <outbound-ports>
            <!--
            Allowed port range when connecting to other nodes.
            0 or * means use system provided port.
            -->
            <ports>0</ports>
        </outbound-ports>
        <join>
            <multicast enabled="true">
                <multicast-group>224.2.2.5</multicast-group>
                <multicast-port>44327</multicast-port>
                <!-- trusted-interfaces>
                   <interface>10.109.0.*</interface>
                </trusted-interfaces -->   
            </multicast>
            <tcp-ip enabled="false">
                <interface>*.*.*.*</interface>
                <member-list>
                    <member>*.*.*.*</member>
                </member-list>
            </tcp-ip>
            <aws enabled="false">
                <access-key>my-access-key</access-key>
                <secret-key>my-secret-key</secret-key>
                <!--optional, default is us-east-1 -->
                <region>us-west-1</region>
                <!--optional, default is ec2.amazonaws.com. If set, region shouldn't be set as it will override this property -->
                <host-header>ec2.amazonaws.com</host-header>
                <!-- optional, only instances belonging to this group will be discovered, default will try all running instances -->
                <security-group-name>hazelcast-sg</security-group-name>
                <tag-key>type</tag-key>
                <tag-value>hz-nodes</tag-value>
            </aws>
            <discovery-strategies>
            </discovery-strategies>
        </join>
        <interfaces enabled="true">
            <interface>172.*.*.*</interface>
        </interfaces>
        <ssl enabled="false"/>
        <socket-interceptor enabled="false"/>
        <symmetric-encryption enabled="false">
            <!--
               encryption algorithm such as
               DES/ECB/PKCS5Padding,
               PBEWithMD5AndDES,
               AES/CBC/PKCS5Padding,
               Blowfish,
               DESede
            -->
            <algorithm>PBEWithMD5AndDES</algorithm>
            <!-- salt value to use when generating the secret key -->
            <salt>thesalt</salt>
            <!-- pass phrase to use when generating the secret key -->
            <password>thepass</password>
            <!-- iteration count to use when generating the secret key -->
            <iteration-count>19</iteration-count>
        </symmetric-encryption>
    </network>
    <partition-group enabled="false"/>
    <executor-service name="default">
        <pool-size>16</pool-size>
        <!--Queue capacity. 0 means Integer.MAX_VALUE.-->
        <queue-capacity>0</queue-capacity>
    </executor-service>
    <queue name="default">
        <!--
            Maximum size of the queue. When a JVM's local queue size reaches the maximum,
            all put/offer operations will get blocked until the queue size
            of the JVM goes down below the maximum.
            Any integer between 0 and Integer.MAX_VALUE. 0 means
            Integer.MAX_VALUE. Default is 0.
        -->
        <max-size>0</max-size>
        <!--
            Number of backups. If 1 is set as the backup-count for example,
            then all entries of the map will be copied to another JVM for
            fail-safety. 0 means no backup.
        -->
        <backup-count>1</backup-count>

        <!--
            Number of async backups. 0 means no backup.
        -->
        <async-backup-count>0</async-backup-count>

        <empty-queue-ttl>-1</empty-queue-ttl>
    </queue>
    <map name="default">
        <!--
           Data type that will be used for storing recordMap.
           Possible values:
           BINARY (default): keys and values will be stored as binary data
           OBJECT : values will be stored in their object forms
           NATIVE : values will be stored in non-heap region of JVM
        -->
        <in-memory-format>BINARY</in-memory-format>

        <!--
            Number of backups. If 1 is set as the backup-count for example,
            then all entries of the map will be copied to another JVM for
            fail-safety. 0 means no backup.
        -->
        <backup-count>1</backup-count>
        <!--
            Number of async backups. 0 means no backup.
        -->
        <async-backup-count>0</async-backup-count>
        <!--
            Maximum number of seconds for each entry to stay in the map. Entries that are
            older than <time-to-live-seconds> and not updated for <time-to-live-seconds>
            will get automatically evicted from the map.
            Any integer between 0 and Integer.MAX_VALUE. 0 means infinite. Default is 0.
        -->
        <time-to-live-seconds>0</time-to-live-seconds>
        <!--
            Maximum number of seconds for each entry to stay idle in the map. Entries that are
            idle(not touched) for more than <max-idle-seconds> will get
            automatically evicted from the map. Entry is touched if get, put or containsKey is called.
            Any integer between 0 and Integer.MAX_VALUE. 0 means infinite. Default is 0.
        -->
        <max-idle-seconds>0</max-idle-seconds>
        <!--
            Valid values are:
            NONE (no eviction),
            LRU (Least Recently Used),
            LFU (Least Frequently Used).
            NONE is the default.
        -->
        <eviction-policy>NONE</eviction-policy>
        <!--
            Maximum size of the map. When max size is reached,
            map is evicted based on the policy defined.
            Any integer between 0 and Integer.MAX_VALUE. 0 means
            Integer.MAX_VALUE. Default is 0.
        -->
        <max-size policy="PER_NODE">0</max-size>
        <!--
            `eviction-percentage` property is deprecated and will be ignored when it is set.

            As of version 3.7, eviction mechanism changed.
            It uses a probabilistic algorithm based on sampling. Please see documentation for further details
        -->
        <eviction-percentage>25</eviction-percentage>
        <!--
            `min-eviction-check-millis` property is deprecated  and will be ignored when it is set.

            As of version 3.7, eviction mechanism changed.
            It uses a probabilistic algorithm based on sampling. Please see documentation for further details
        -->
        <min-eviction-check-millis>100</min-eviction-check-millis>
        <!--
            While recovering from split-brain (network partitioning),
            map entries in the small cluster will merge into the bigger cluster
            based on the policy set here. When an entry merge into the
            cluster, there might an existing entry with the same key already.
            Values of these entries might be different for that same key.
            Which value should be set for the key? Conflict is resolved by
            the policy set here. Default policy is PutIfAbsentMapMergePolicy

            There are built-in merge policies such as
            com.hazelcast.map.merge.PassThroughMergePolicy; entry will be overwritten if merging entry exists for the key.
            com.hazelcast.map.merge.PutIfAbsentMapMergePolicy ; entry will be added if the merging entry doesn't exist in the cluster.
            com.hazelcast.map.merge.HigherHitsMapMergePolicy ; entry with the higher hits wins.
            com.hazelcast.map.merge.LatestUpdateMapMergePolicy ; entry with the latest update wins.
        -->
        <merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>

        <!--
           Control caching of de-serialized values. Caching makes query evaluation faster, but it cost memory.
           Possible Values:
                        NEVER: Never cache deserialized object
                        INDEX-ONLY: Caches values only when they are inserted into an index.
                        ALWAYS: Always cache deserialized values.
        -->
        <cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>

    </map>

    <multimap name="default">
        <backup-count>1</backup-count>
        <value-collection-type>SET</value-collection-type>
    </multimap>

    <list name="default">
        <backup-count>1</backup-count>
    </list>

    <set name="default">
        <backup-count>1</backup-count>
    </set>

    <jobtracker name="default">
        <max-thread-size>0</max-thread-size>
        <!-- Queue size 0 means number of partitions * 2 -->
        <queue-size>0</queue-size>
        <retry-count>0</retry-count>
        <chunk-size>1000</chunk-size>
        <communicate-stats>true</communicate-stats>
        <topology-changed-strategy>CANCEL_RUNNING_OPERATION</topology-changed-strategy>
    </jobtracker>

    <semaphore name="default">
        <initial-permits>0</initial-permits>
        <backup-count>1</backup-count>
        <async-backup-count>0</async-backup-count>
    </semaphore>

    <reliable-topic name="default">
        <read-batch-size>10</read-batch-size>
        <topic-overload-policy>BLOCK</topic-overload-policy>
        <statistics-enabled>true</statistics-enabled>
    </reliable-topic>

    <ringbuffer name="default">
        <capacity>10000</capacity>
        <backup-count>1</backup-count>
        <async-backup-count>0</async-backup-count>
        <time-to-live-seconds>0</time-to-live-seconds>
        <in-memory-format>BINARY</in-memory-format>
    </ringbuffer>

    <serialization>
        <portable-version>0</portable-version>
    </serialization>

    <services enable-defaults="true"/>

    <lite-member enabled="false"/>

</hazelcast>

hazelcast.xml (Clup99)

<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved.
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<!--
    The default Hazelcast configuration. This is used when no hazelcast.xml is present.
    Please see the schema for how to configure Hazelcast at https://hazelcast.com/schema/config/hazelcast-config-3.8.xsd
    or the documentation at https://hazelcast.org/documentation/
-->
<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.8.xsd"
           xmlns="http://www.hazelcast.com/schema/config"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <group>
        <name>dev</name>
        <password>dev-pass</password>
    </group>
    <management-center enabled="false">http://localhost:8081/mancenter</management-center>
    <properties><property name="hazelcast.local.localAddress">172.21.0.2</property></properties>
    <network>
        <public-address>10.109.0.36</public-address>
        <port auto-increment="true" port-count="100">6801</port>
        <outbound-ports>
            <!--
            Allowed port range when connecting to other nodes.
            0 or * means use system provided port.
            -->
            <ports>0</ports>
        </outbound-ports>
        <join>
            <multicast enabled="true">
                <multicast-group>224.2.2.5</multicast-group>
                <multicast-port>44327</multicast-port>
                <!-- trusted-interfaces>
                   <interface>10.109.0.*</interface>
                </trusted-interfaces -->   
            </multicast>
            <tcp-ip enabled="false">
                <interface>*.*.*.*</interface>
                <member-list>
                    <member>*.*.*.*</member>
                </member-list>
            </tcp-ip>
            <aws enabled="false">
                <access-key>my-access-key</access-key>
                <secret-key>my-secret-key</secret-key>
                <!--optional, default is us-east-1 -->
                <region>us-west-1</region>
                <!--optional, default is ec2.amazonaws.com. If set, region shouldn't be set as it will override this property -->
                <host-header>ec2.amazonaws.com</host-header>
                <!-- optional, only instances belonging to this group will be discovered, default will try all running instances -->
                <security-group-name>hazelcast-sg</security-group-name>
                <tag-key>type</tag-key>
                <tag-value>hz-nodes</tag-value>
            </aws>
            <discovery-strategies>
            </discovery-strategies>
        </join>
        <interfaces enabled="true">
            <interface>172.*.*.*</interface>
        </interfaces>
        <ssl enabled="false"/>
        <socket-interceptor enabled="false"/>
        <symmetric-encryption enabled="false">
            <!--
               encryption algorithm such as
               DES/ECB/PKCS5Padding,
               PBEWithMD5AndDES,
               AES/CBC/PKCS5Padding,
               Blowfish,
               DESede
            -->
            <algorithm>PBEWithMD5AndDES</algorithm>
            <!-- salt value to use when generating the secret key -->
            <salt>thesalt</salt>
            <!-- pass phrase to use when generating the secret key -->
            <password>thepass</password>
            <!-- iteration count to use when generating the secret key -->
            <iteration-count>19</iteration-count>
        </symmetric-encryption>
    </network>
    <partition-group enabled="false"/>
    <executor-service name="default">
        <pool-size>16</pool-size>
        <!--Queue capacity. 0 means Integer.MAX_VALUE.-->
        <queue-capacity>0</queue-capacity>
    </executor-service>
    <queue name="default">
        <!--
            Maximum size of the queue. When a JVM's local queue size reaches the maximum,
            all put/offer operations will get blocked until the queue size
            of the JVM goes down below the maximum.
            Any integer between 0 and Integer.MAX_VALUE. 0 means
            Integer.MAX_VALUE. Default is 0.
        -->
        <max-size>0</max-size>
        <!--
            Number of backups. If 1 is set as the backup-count for example,
            then all entries of the map will be copied to another JVM for
            fail-safety. 0 means no backup.
        -->
        <backup-count>1</backup-count>

        <!--
            Number of async backups. 0 means no backup.
        -->
        <async-backup-count>0</async-backup-count>

        <empty-queue-ttl>-1</empty-queue-ttl>
    </queue>
    <map name="default">
        <!--
           Data type that will be used for storing recordMap.
           Possible values:
           BINARY (default): keys and values will be stored as binary data
           OBJECT : values will be stored in their object forms
           NATIVE : values will be stored in non-heap region of JVM
        -->
        <in-memory-format>BINARY</in-memory-format>

        <!--
            Number of backups. If 1 is set as the backup-count for example,
            then all entries of the map will be copied to another JVM for
            fail-safety. 0 means no backup.
        -->
        <backup-count>1</backup-count>
        <!--
            Number of async backups. 0 means no backup.
        -->
        <async-backup-count>0</async-backup-count>
        <!--
            Maximum number of seconds for each entry to stay in the map. Entries that are
            older than <time-to-live-seconds> and not updated for <time-to-live-seconds>
            will get automatically evicted from the map.
            Any integer between 0 and Integer.MAX_VALUE. 0 means infinite. Default is 0.
        -->
        <time-to-live-seconds>0</time-to-live-seconds>
        <!--
            Maximum number of seconds for each entry to stay idle in the map. Entries that are
            idle(not touched) for more than <max-idle-seconds> will get
            automatically evicted from the map. Entry is touched if get, put or containsKey is called.
            Any integer between 0 and Integer.MAX_VALUE. 0 means infinite. Default is 0.
        -->
        <max-idle-seconds>0</max-idle-seconds>
        <!--
            Valid values are:
            NONE (no eviction),
            LRU (Least Recently Used),
            LFU (Least Frequently Used).
            NONE is the default.
        -->
        <eviction-policy>NONE</eviction-policy>
        <!--
            Maximum size of the map. When max size is reached,
            map is evicted based on the policy defined.
            Any integer between 0 and Integer.MAX_VALUE. 0 means
            Integer.MAX_VALUE. Default is 0.
        -->
        <max-size policy="PER_NODE">0</max-size>
        <!--
            `eviction-percentage` property is deprecated and will be ignored when it is set.

            As of version 3.7, eviction mechanism changed.
            It uses a probabilistic algorithm based on sampling. Please see documentation for further details
        -->
        <eviction-percentage>25</eviction-percentage>
        <!--
            `min-eviction-check-millis` property is deprecated  and will be ignored when it is set.

            As of version 3.7, eviction mechanism changed.
            It uses a probabilistic algorithm based on sampling. Please see documentation for further details
        -->
        <min-eviction-check-millis>100</min-eviction-check-millis>
        <!--
            While recovering from split-brain (network partitioning),
            map entries in the small cluster will merge into the bigger cluster
            based on the policy set here. When an entry merge into the
            cluster, there might an existing entry with the same key already.
            Values of these entries might be different for that same key.
            Which value should be set for the key? Conflict is resolved by
            the policy set here. Default policy is PutIfAbsentMapMergePolicy

            There are built-in merge policies such as
            com.hazelcast.map.merge.PassThroughMergePolicy; entry will be overwritten if merging entry exists for the key.
            com.hazelcast.map.merge.PutIfAbsentMapMergePolicy ; entry will be added if the merging entry doesn't exist in the cluster.
            com.hazelcast.map.merge.HigherHitsMapMergePolicy ; entry with the higher hits wins.
            com.hazelcast.map.merge.LatestUpdateMapMergePolicy ; entry with the latest update wins.
        -->
        <merge-policy>com.hazelcast.map.merge.PutIfAbsentMapMergePolicy</merge-policy>

        <!--
           Control caching of de-serialized values. Caching makes query evaluation faster, but it cost memory.
           Possible Values:
                        NEVER: Never cache deserialized object
                        INDEX-ONLY: Caches values only when they are inserted into an index.
                        ALWAYS: Always cache deserialized values.
        -->
        <cache-deserialized-values>INDEX-ONLY</cache-deserialized-values>

    </map>

    <multimap name="default">
        <backup-count>1</backup-count>
        <value-collection-type>SET</value-collection-type>
    </multimap>

    <list name="default">
        <backup-count>1</backup-count>
    </list>

    <set name="default">
        <backup-count>1</backup-count>
    </set>

    <jobtracker name="default">
        <max-thread-size>0</max-thread-size>
        <!-- Queue size 0 means number of partitions * 2 -->
        <queue-size>0</queue-size>
        <retry-count>0</retry-count>
        <chunk-size>1000</chunk-size>
        <communicate-stats>true</communicate-stats>
        <topology-changed-strategy>CANCEL_RUNNING_OPERATION</topology-changed-strategy>
    </jobtracker>

    <semaphore name="default">
        <initial-permits>0</initial-permits>
        <backup-count>1</backup-count>
        <async-backup-count>0</async-backup-count>
    </semaphore>

    <reliable-topic name="default">
        <read-batch-size>10</read-batch-size>
        <topic-overload-policy>BLOCK</topic-overload-policy>
        <statistics-enabled>true</statistics-enabled>
    </reliable-topic>

    <ringbuffer name="default">
        <capacity>10000</capacity>
        <backup-count>1</backup-count>
        <async-backup-count>0</async-backup-count>
        <time-to-live-seconds>0</time-to-live-seconds>
        <in-memory-format>BINARY</in-memory-format>
    </ringbuffer>

    <serialization>
        <portable-version>0</portable-version>
    </serialization>

    <services enable-defaults="true"/>

    <lite-member enabled="false"/>

</hazelcast>

Each host can see only itself:

Attaching to hazel
hazel    | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
hazel    |     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
hazel    |     inet 127.0.0.1/8 scope host lo
hazel    |        valid_lft forever preferred_lft forever
hazel    |     inet6 ::1/128 scope host 
hazel    |        valid_lft forever preferred_lft forever
hazel    | 242: eth0@if243: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
hazel    |     link/ether 02:42:ac:15:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
hazel    |     inet 172.21.0.3/16 scope global eth0
hazel    |        valid_lft forever preferred_lft forever
hazel    |     inet6 fe80::42:acff:fe15:3/64 scope link tentative 
hazel    |        valid_lft forever preferred_lft forever
hazel    | ########################################
hazel    | # RUN_JAVA=
hazel    | # JAVA_OPTS=
hazel    | # starting now....
hazel    | ########################################
hazel    | Process id 9 for hazelcast instance is written to location:  /opt/hazelcast/hazelcast_instance.pid
hazel    | Sep 22, 2017 4:05:17 PM com.hazelcast.config.XmlConfigLocator
hazel    | INFO: Loading 'hazelcast.xml' from working directory.
hazel    | Sep 22, 2017 4:05:17 PM com.hazelcast.instance.DefaultAddressPicker
hazel    | INFO: [LOCAL] [dev] [3.8.3] Picking address configured by property 'hazelcast.local.localAddress'
hazel    | Sep 22, 2017 4:05:17 PM com.hazelcast.instance.DefaultAddressPicker
hazel    | INFO: [LOCAL] [dev] [3.8.3] Picked [172.21.0.2]:6801, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=6801], bind any local is true
hazel    | Sep 22, 2017 4:05:17 PM com.hazelcast.instance.DefaultAddressPicker
hazel    | INFO: [LOCAL] [dev] [3.8.3] Using public address: [10.109.0.36]:6801
hazel    | Sep 22, 2017 4:05:17 PM com.hazelcast.system
hazel    | INFO: [10.109.0.36]:6801 [dev] [3.8.3] Hazelcast 3.8.3 (20170704 - 10e1449) starting at [10.109.0.36]:6801
hazel    | Sep 22, 2017 4:05:17 PM com.hazelcast.system
hazel    | INFO: [10.109.0.36]:6801 [dev] [3.8.3] Copyright (c) 2008-2016, Hazelcast, Inc. All Rights Reserved.
hazel    | Sep 22, 2017 4:05:17 PM com.hazelcast.system
hazel    | INFO: [10.109.0.36]:6801 [dev] [3.8.3] Configured Hazelcast Serialization version : 1
hazel    | Sep 22, 2017 4:05:17 PM com.hazelcast.spi.impl.operationservice.impl.BackpressureRegulator
hazel    | INFO: [10.109.0.36]:6801 [dev] [3.8.3] Backpressure is disabled
hazel    | Sep 22, 2017 4:05:18 PM com.hazelcast.instance.Node
hazel    | WARNING: [10.109.0.36]:6801 [dev] [3.8.3] Cannot assign requested address (Error setting socket option)
hazel    | java.net.SocketException: Cannot assign requested address (Error setting socket option)
hazel    |  at java.net.PlainDatagramSocketImpl.socketSetOption0(Native Method)
hazel    |  at java.net.PlainDatagramSocketImpl.socketSetOption(PlainDatagramSocketImpl.java:74)
hazel    |  at java.net.AbstractPlainDatagramSocketImpl.setOption(AbstractPlainDatagramSocketImpl.java:309)
hazel    |  at java.net.MulticastSocket.setInterface(MulticastSocket.java:471)
hazel    |  at com.hazelcast.internal.cluster.impl.MulticastService.createMulticastService(MulticastService.java:98)
hazel    |  at com.hazelcast.instance.Node.<init>(Node.java:212)
hazel    |  at com.hazelcast.instance.HazelcastInstanceImpl.createNode(HazelcastInstanceImpl.java:159)
hazel    |  at com.hazelcast.instance.HazelcastInstanceImpl.<init>(HazelcastInstanceImpl.java:127)
hazel    |  at com.hazelcast.instance.HazelcastInstanceFactory.constructHazelcastInstance(HazelcastInstanceFactory.java:218)
hazel    |  at com.hazelcast.instance.HazelcastInstanceFactory.newHazelcastInstance(HazelcastInstanceFactory.java:176)
hazel    |  at com.hazelcast.instance.HazelcastInstanceFactory.newHazelcastInstance(HazelcastInstanceFactory.java:126)
hazel    |  at com.hazelcast.core.Hazelcast.newHazelcastInstance(Hazelcast.java:58)
hazel    |  at com.hazelcast.core.server.StartServer.main(StartServer.java:46)
hazel    | 
hazel    | Sep 22, 2017 4:05:18 PM com.hazelcast.instance.Node
hazel    | INFO: [10.109.0.36]:6801 [dev] [3.8.3] Creating MulticastJoiner
hazel    | Sep 22, 2017 4:05:18 PM com.hazelcast.spi.impl.operationexecutor.impl.OperationExecutorImpl
hazel    | INFO: [10.109.0.36]:6801 [dev] [3.8.3] Starting 2 partition threads
hazel    | Sep 22, 2017 4:05:18 PM com.hazelcast.spi.impl.operationexecutor.impl.OperationExecutorImpl
hazel    | INFO: [10.109.0.36]:6801 [dev] [3.8.3] Starting 3 generic threads (1 dedicated for priority tasks)
hazel    | Sep 22, 2017 4:05:18 PM com.hazelcast.core.LifecycleService
hazel    | INFO: [10.109.0.36]:6801 [dev] [3.8.3] [10.109.0.36]:6801 is STARTING
hazel    | Sep 22, 2017 4:05:21 PM com.hazelcast.system
hazel    | INFO: [10.109.0.36]:6801 [dev] [3.8.3] Cluster version set to 3.8
hazel    | Sep 22, 2017 4:05:21 PM com.hazelcast.internal.cluster.impl.MulticastJoiner
hazel    | INFO: [10.109.0.36]:6801 [dev] [3.8.3] 
hazel    | 
hazel    | 
hazel    | Members [1] {
hazel    |  Member [10.109.0.36]:6801 - f15f8d4f-e217-49e0-9de7-1a1d656d9b9a this
hazel    | }
hazel    | 
hazel    | Sep 22, 2017 4:05:21 PM com.hazelcast.core.LifecycleService
hazel    | INFO: [10.109.0.36]:6801 [dev] [3.8.3] [10.109.0.36]:6801 is STARTED

Not sure how to troubleshoot this issue.

Thank you for any help on this matter & good weekend! Regards, Greg.

hasancelik commented 6 years ago

Hi @gregbkr,

Sorry for the late answer.

Unfortunately, it is not possible due to some docker environment limitations like https://github.com/docker/libnetwork/issues/552. You need to use extra plugins for example Weave Net networking plugin for Docker for this purpose.

I hope I could help.