Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker Compose,如何在Redis容器上连接Java应用程序和自定义Docker网络_Docker_Networking_Redis_Docker Compose - Fatal编程技术网

Docker Compose,如何在Redis容器上连接Java应用程序和自定义Docker网络

Docker Compose,如何在Redis容器上连接Java应用程序和自定义Docker网络,docker,networking,redis,docker-compose,Docker,Networking,Redis,Docker Compose,我有一个java应用程序,通过自定义docker网络通过外部数据库连接 我想连接一个Redis容器 我在应用程序配置上尝试了以下操作: 1 localhost:6379 2 app_redis://app_redis:6379 3 redis://app_redis:6379 我的设置不起作用 docker网络设置: docker网络创建-d网桥——子网192.168.0.0/24——网关192.168.0.1 mynet PS:这可能与主题无关,我如何在docker compose

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

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

1 localhost:6379
2 app_redis://app_redis:6379 
3 redis://app_redis:6379 
我的设置不起作用

docker网络设置:

docker网络创建-d网桥——子网192.168.0.0/24——网关192.168.0.1 mynet

PS:这可能与主题无关,我如何在docker compose上添加网络而不是外部网络

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网络上才能相互通信。
app kotin
容器位于
front
网络上,但是
app redis
容器没有
networks:
块,因此进入自动创建的
默认
网络

最简单的修复方法是将
app redis
容器放到同一个网络上:

应用程序redis: 图片:redis:5.0.9-alpine 网络: -正面 然后,Compose服务名
app redis
将可用作同一网络上其他容器的主机名

您可以大大简化此设置。您通常不需要为Docker专用网络手动指定IP配置。Compose可以为您创建网络,实际上它将为您创建一个名为
default
的网络。(进一步讨论。)
链接:
公开:
在现代Docker网络中没有使用;Compose可以为您提供默认的
容器名称:
;您不需要从图像中重复
工作目录:
命令:
。删除所有这些内容会给您留下:

版本:“3”
服务:
app kotin:
构建:./app
重新启动:始终
端口:
- '3001:3001'
应用程序redis:
图片:redis:5.0.9-alpine

服务器容器将能够使用另一个容器的Compose service name
app redis
作为主机名,即使使用这种最小配置也是如此。

将redis服务添加到同一网络中。现在可以了。在应用程序配置中使用服务名作为主机名,但使用docker compose创建的默认网络,连接到主机容器数据库不起作用。你能告诉我配置网络的正确方法吗?我不是使用外部创建的docker网络,而是使用docker compose来配置它?谢谢,非常感谢。如果您的数据库运行在非Compose
mynet
网络上,那么您确实需要一个顶级
网络:
块,就像您最初指向它一样,但您可以使用该块来代替创建新网络。