Docker 从另一个容器访问Neo4J
我正在docker容器中运行neo4j图形数据库。我已经在Go中编写了另一个服务,它应该能够从其各自的容器中执行查询。然而,我无法建立这两个容器之间的连接 我的数据库的Docker 从另一个容器访问Neo4J,docker,go,neo4j,containers,Docker,Go,Neo4j,Containers,我正在docker容器中运行neo4j图形数据库。我已经在Go中编写了另一个服务,它应该能够从其各自的容器中执行查询。然而,我无法建立这两个容器之间的连接 我的数据库的dockerfile: version: "3" services: neo4j-db: image: neo4j:latest ports: - "7474:7474" - "7473:7473" - "7687:7687" expose: - 7474
dockerfile
:
version: "3"
services:
neo4j-db:
image: neo4j:latest
ports:
- "7474:7474"
- "7473:7473"
- "7687:7687"
expose:
- 7474
networks:
app_net:
ipv4_address: 172.18.18.10
volumes:
- //C/Users/<user>/Desktop/neoj4/4.0/config:/conf
networks:
app_net:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "false"
ipam:
driver: default
config:
- subnet: 172.18.18.0/24
最后,在我的Go容器中:
uri := "bolt://127.18.18.10:7687"
username := "neo4j"
password := "test"
var (
err error
driver neo4j.Driver
session neo4j.Session
result neo4j.Result
greeting interface{}
)
fmt.Println("Connecting to Neo4j")
driver, err = neo4j.NewDriver(uri, neo4j.BasicAuth(username, password, ""), useConsoleLogger(neo4j.ERROR))
if err != nil {
fmt.Println("ERROR:" , err)
}
defer driver.Close()
fmt.Println("Getting Session")
session, err = driver.Session(neo4j.AccessModeWrite)
if err != nil {
fmt.Println("ERROR:" , err)
}
defer session.Close()
调用函数时,执行会在fmt.Println(“Getting Session”)
之后停滞30秒,不会抛出任何错误,然后简单地终止
我还确保两个容器都在同一个网络上(app\u net
)。我可以在两个容器之间自由移动。但是,尝试从go容器到neo4j的telnet会导致无法连接到远程主机:连接被拒绝
我不确定我做错了什么。neo4j上的浏览器访问功能正常,从我看到的情况来看,这些容器都在同一个网络上
非常感谢您的任何建议或想法。在花了一些额外的时间之后,我已经设法让它工作起来了。我采取了以下步骤:
uri
(即)bolt://container_name“
)在花了一些额外的时间后,我设法使它工作起来。我采取了以下步骤:
uri
(即)bolt://container_name“
) uri := "bolt://127.18.18.10:7687"
username := "neo4j"
password := "test"
var (
err error
driver neo4j.Driver
session neo4j.Session
result neo4j.Result
greeting interface{}
)
fmt.Println("Connecting to Neo4j")
driver, err = neo4j.NewDriver(uri, neo4j.BasicAuth(username, password, ""), useConsoleLogger(neo4j.ERROR))
if err != nil {
fmt.Println("ERROR:" , err)
}
defer driver.Close()
fmt.Println("Getting Session")
session, err = driver.Session(neo4j.AccessModeWrite)
if err != nil {
fmt.Println("ERROR:" , err)
}
defer session.Close()
if driver, err = neo4j.NewDriver(uri, neo4j.BasicAuth(username, password, ""), func(config *neo4j.Config) {
config.Log = neo4j.ConsoleLogger(neo4j.ERROR)
config.Encrypted = false
}); err != nil {
return err
}
defer driver.Close()