ArangoDB无法使用Docker和Java在AWS EC2上启动

tnkciper  于 2023-11-15  发布在  Go
关注(0)|答案(1)|浏览(194)

我有一个使用Java程序启动ArangoDB的设置。下面的代码将启动ArangoDB。

ProcessBuilder processBuilder = new ProcessBuilder(arangodExecFile);
  processBuilder.environment().put("hostaddress", host);          
  arangodbProcess = processBuilder.start();

字符串
我也试过使用arangodbProcess = Runtime.getRuntime().exec(arangodExecFile, env_hostaddress);该程序运行在一个Docker容器中,使用Ubuntu作为基础镜像。实现工作正常,ArangoDB启动没有任何问题。
当我在AWS EC2示例上部署相同的Docker镜像时,ArangoDB无法启动,并出现以下错误:

2023-10-25T10:26:08Z [50] ERROR [874fa] {communication} unable to bind to endpoint 'http+tcp://host_ip:8529': Address not available
2023-10-25T10:26:08Z [50] FATAL [c81f6] {general} failed to bind to endpoint 'http+tcp://host_ip:8529'. Please check whether another instance is already running using this endpoint and review your endpoints configuration.


我没有ENDPOINTS文件。server.endpoint已正确配置为使用AWS示例的IP地址在AWS示例上启动ArangoDB。我正在使用AWS示例IP绑定服务器端点,以便我可以从不同的机器访问它。从不同的AWS示例调用ArangoDB端点以获取ArangoDB驱动程序,它应该不会影响ArangoDB的启动,当我试图获取正在运行的ArangoDB进程的ArangoDB对象时,它可能会导致问题。

  • 我确认端口没有被任何其他使用ss -tulpn的进程使用。
  • 此外,我还添加了一个命令来使用kill -9 $(ps axf | grep arangod | grep -v grep | awk '{print $1}')杀死任何现有的ArangoDB进程。
  • 我尝试在安全组规则中添加/删除端口,以允许端口8529上的流量,并在'docker run'命令中Map/取消Map端口。
  • 如果我访问在AWS上运行的Docker容器,并通过使用./arangodbsudo ./arangod执行arangod文件来启动ArangoDB,ArangoDB会顺利启动。
qni6mghb

qni6mghb1#

我假设“在AWS EC2示例上部署相同的Docker镜像”意味着您已经在EC2示例上设置了Docker,并且它服务于Docker主机。
默认情况下,在Docker容器中运行的应用程序不能访问主机的网络。这意味着您的ArangoDB示例不会看到您的EC2示例的任何IP地址。它将看到的是具有自己IP地址的Docker虚拟网络。
Docker能够在主机网络和容器网络之间转发数据包。要做到这一点,您需要公开您想要转发的端口。您可以通过使用docker run --publish 8529:8529或类似工具将容器端口发布到主机来实现这一点。
在容器内部,您应该将侦听套接字绑定到内部网络接口。(如果ArangoDB需要通过IP绑定)。启动容器时,Docker重写了它们的/etc/hosts,这样容器的主机名就解析为它的内部地址。你不再需要从外部传递主机地址了。
或者,您可以运行Docker容器,使其共享主机的网络(通过使用docker run --network=host),但它的安全性较低且更难配置(这样,您确实需要知道绑定侦听套接字的主机地址)。

相关问题