【问题标题】:Docker-Compose, How To Connect Java Application With Custom Docker Network On Redis ContainerDocker-Compose,如何在 Redis 容器上将 Java 应用程序与自定义 Docker 网络连接起来
【发布时间】:2020-04-24 23:39:52
【问题描述】:

我有一个 java 应用程序,它通过自定义 docker 网络通过外部数据库连接 我想连接一个 Redis 容器。

docker-redis github topic

我在应用程序配置上尝试了以下操作:

1 localhost:6379
2 app_redis://app_redis:6379 
3 redis://app_redis:6379 

我的设置没有任何效果

码头网络设置:

    docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 mynet

Connect to a Database Running on Your Docker Host

PS:这可能是题外话,我如何在 docker-compose 而不是外部添加网络

码头工人撰写:

    services:
        app-kotin:
            build: ./app
            container_name: app_server
            restart: always
            working_dir: /app
            command: java -jar app-server.jar
            ports:
                - 3001:3001
            links:
              - app-redis
            networks: 
                - front
        app-redis:
            image: redis:5.0.9-alpine
            container_name: app-redis
            expose:
                - 6379 

    networks:    
        front:        
            external:
                name: mynet

使用上面的设置如何通过 Redis 容器进行连接?

【问题讨论】:

    标签: docker networking redis docker-compose


    【解决方案1】:

    两个容器需要在同一个 Docker 网络上才能相互通信。 app-kotin 容器位于 front 网络上,但 app-redis 容器没有 networks: 块,因此进入自动创建的 default 网络。

    您所拥有的最简单的解决方法是将app-redis 容器也放在同一个网络上:

        app-redis:
            image: redis:5.0.9-alpine
            networks:
                - front
    

    Compose 服务名称 app-redis 然后可用作主机名,来自同一网络上的其他容器。

    您可以大大简化此设置。您通常不需要手动指定 Docker 专用网络的 IP 配置。 Compose 可以为您创建网络,实际上它会为您创建一个名为default 的网络。 (Networking in Compose 进一步讨论了这一点。)links:expose: 不用于现代 Docker 网络; Compose 可以为你提供一个默认的container_name:;而且您不需要从图像中重复working_dir:command:。删除所有这些会留下:

    version: '3'
    services:
      app-kotin:
        build: ./app
        restart: always
        ports:
          - '3001:3001'
      app-redis:
        image: redis:5.0.9-alpine
    

    服务器容器将能够使用其他容器的 Compose 服务名称 app-redis 作为主机名,即使使用此最小配置。

    【讨论】:

    • 将redis服务加入同一个网络。现在可以了。并在应用程序配置中使用服务名称作为主机名,但使用 docker-compose 创建的默认网络,连接到主机容器数据库不起作用。您能否展示配置网络的正确方法,而不是使用外部创建的 docker 网络,而是使用 docker-compose 配置它?谢谢,非常感谢。
    • 如果您有一个在非 Compose mynet 网络上运行的数据库,那么您确实需要一个顶级 networks: 块,就像您最初指向它一样,但您可以使用该块来configure the default network 而不是创建新网络。
    猜你喜欢
    • 2022-11-05
    • 2023-03-20
    • 1970-01-01
    • 2016-02-19
    • 2020-07-10
    • 2019-04-24
    • 2017-07-11
    • 2020-10-02
    • 2020-03-08
    相关资源
    最近更新 更多