当前位置: 首页 > 知识库问答 >
问题:

关于在Docker-Compose中设置Apache Ignite的问题

咸弘雅
2023-03-14
  #Ignite
  ignite:
    image: apacheignite/ignite
    environment:
      - IGNITE_QUITE=false
    #volumes:
    #  - ./project/src/test/resources/ignite.xml:/opt/ignite/apache-ignite-fabric/config/default-config.xml
    ports:
      - 11211:11211
      - 47100:47100
      - 47500:47500
      - 49112:49112

  # Java Shell
  java:
    image: local/java
    build:
      context: .
    command: /bin/bash
    volumes:
      - .:/project
    depends_on:
      - ignite
    ports:
      - 8000:8000
      - 8080:8080
      - 1099:1099
 <bean id="ignite.cfg"
          class="org.apache.ignite.configuration.IgniteConfiguration">

        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
                        <property name="addresses">
                            <list>
                                <!--
                                Explicitly specifying address of a local node to let it start and
                                operate normally even if there is no more nodes in the cluster.
                                You can also optionally specify an individual port or port range.
                                -->
                                <value>127.0.0.1</value>

                                <!--
                                IP Address and optional port range of a remote node.
                                You can also optionally specify an individual port.
                                -->
                                <value>127.0.0.1:47500..47509</value>
                            </list>
                        </property>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
@Test
    //@Ignore
    public void should_run_cluster()
    {
        try (Ignite ignite = Ignition.start("ignite2.xml"))
        {
            IgniteCache<Integer, String> cache = ignite.getOrCreateCache("myCacheName");

            // Store keys in cache (values will end up on different cache nodes).
            for (int i = 0; i < 10; i++)
            {
                cache.put(i, Integer.toString(i));
            }

            for (int i = 0; i < 10; i++)
            {
                System.out.println("Got [key=" + i + ", val=" + cache.get(i) + ']');
            }
        }
    }

我尝试从Java服务公开端口(不同的端口#,不是只公开内部端口,等等),但没有成功。

如果我尝试将配置附加到Ignite服务,它完全不起作用。

我的最终目标是使用Docker-Compose建立一个环境,我可以在本地加入该环境进行测试,但最终将其转移到ECS/Fargate。

  ignite:
    image: apacheignite/ignite
    environment:
      - IGNITE_QUIET=false
    volumes:
      - ./project/src/test/resources/ignite-main.xml:/opt/ignite/apache-ignite-fabric/config/default-config.xml
    ports:
      - 11211:11211
      - 47100:47100
      - 47500:47500
      - 49112:49112
<property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="localPort" value="47500"/>
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
                        <property name="addresses">
                            <list>
                                <value>localhost</value>
                                <value>localhost:47500</value>
                            </list>
                        </property>
                    </bean>
                </property>
            </bean>
        </property>
        <property name="communicationSpi">
            <bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
                <property name="localPort" value="47100"/>
            </bean>
        </property>
<property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="localPort" value="47501"/>
                <property name="ipFinder">
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
                        <property name="addresses">
                            <list>
                                <value>localhost</value>
                                <value>localhost:47500</value>
                            </list>
                        </property>
                    </bean>
                </property>
            </bean>
        </property>
        <property name="communicationSpi">
            <bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
                <property name="localPort" value="47101"/>
            </bean>
        </property>

私人静电点火;

@BeforeClass
public static void beforeAll()
{
    ignite = Ignition.start("ignite.xml");
}

@AfterClass
public static void afterAll()
{
    ignite.close();
}

@Test
public void should_prep_cluster()
{
    IgniteCache<Integer, String> cache = ignite.getOrCreateCache("myCacheName");

    // Store keys in cache (values will end up on different cache nodes).
    for (int i = 0; i < 10; i++)
    {
        cache.put(i, Integer.toString(i));
    }

    for (int i = 0; i < 10; i++)
    {
        System.out.println("Got [key=" + i + ", val=" + cache.get(i) + ']');
    }
}

共有1个答案

陆俊捷
2023-03-14

作为@Alamar回答的补充:

由于Docker Compose服务在单独容器中启动,您不能使用localhost127.0.0.1来发现服务器节点。您可以链接ignite服务以使用DNS名称ignite

组合服务:

# Ignite
ignite:
  image: apacheignite/ignite
  environment:
    - IGNITE_QUIET=false
  # volumes:
  #   - ./project/src/test/resources/ignite.xml:/opt/ignite/apache-ignite-fabric/config/default-config.xml
  # It is not necessary to expose ports outside if they are only used inside docker-compose
  # ports:
  #   - 11211:11211
  #   - 47100:47100
  #   - 47500:47500
  #   - 49112:49112
# Java Shell
java:
  image: local/java
  build:
    context: .
  command: /bin/bash
  volumes:
    - .:/project
  links:
    - ignite
  ports:
    - 8000:8000
    - 8080:8080
    - 1099:1099
<property name="discoverySpi">
    <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
        <property name="ipFinder">
            <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
                <property name="addresses">
                    <list>
                        <value>ignite:47500</value>
                    </list>
                </property>
            </bean>
        </property>
    </bean>
</property>
 类似资料:
  • 问题内容: 我在设置中运行官方Redis镜像https://hub.docker.com/_/redis/。 如何在该图像上使用docker-compose 运行? 我尝试了以下操作,但未连接: 图片的文档说我应该运行: 这是什么意思? 问题答案: 那会覆盖默认值:您试图在从未执行过的容器上运行。 如此处所述,您还可以使用以下方法进行测试: 如这个docker / compose问题2123 所述

  • 2017/09/04 15:58:33 server.go:73:使用API v1 2017/09/04 15:58:33 debugger.go:97:使用args启动进程:[/go/src/debug]无法启动进程:fork/exec/go/src/debug:不允许操作

  • 我可以将其更改为正确的容器主机名-->plaintext://kafka:9092,但这样我就无法用其他应用程序再次访问kafka实例了。有什么简单的方法可以解决这个问题吗?

  • 问题内容: 在我的文件中,具有以下内容。但是,容器不会选择主机名值。有任何想法吗? 当我检查容器中的主机名时,它没有启动。 问题答案: 我发现使用时主机名对其他容器不可见。事实证明这是一个已知问题(也许是一个已知功能),其中一部分讨论是: 我们可能应该在文档中添加有关使用主机名的警告。我认为它很少有用。 就容器网络而言,分配主机名的正确方法是定义一个别名,如下所示: 不幸的是,这 仍然 无法使用。

  • 在我的文件中,我有以下内容。但是容器没有选择主机名值。有什么想法吗? 当我检查容器中的主机名时,它不会拾取。

  • 我有我的yaml文件的以下片段。 如何在docker compose文件中为db容器使用的卷定义卷的大小?