java - 容器之间的连接问题(我想......)
问题描述
我正在使用 docker-compose 运行 3 个容器 1-我的 web 应用程序 2-Postgres 3-Cassandra
一旦我使用:docker-compose up
我的 webapp 启动此异常:com.datastax.driver.core.exceptions.NoHostAvailableException:所有主机尝试查询失败(尝试:cassandra/172.17.0.3:9042
一旦所有容器都运行起来,我就可以进入我的 webapp 并尝试在 cassandras 容器死亡(webapp 容器)之前对其进行 ping 操作,并且所有数据包都已成功返回,所以我猜它们之间实际上存在连接。
最奇怪的是,一旦我得到这个异常: .InvalidQueryException: Keyspace 'myKeyspace' 不存在
这意味着连接已经建立,但在我添加持久性并创建提到的模式之前,但我确实没有改变我的 compose.yml 以获得这个新结果
这是我的 docker-compose.yml:
version: '3.1'
services:
cassandra:
container_name: "cassandra"
image: cassandra
ports:
- 9042:9042
volumes:
- /home/cassandra:/var/lib/cassandra
postgresql:
container_name: "postgresql"
image: postgres:11.1-alpine
restart: always
environment:
POSTGRES_DB: mywebapp
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
volumes:
#- ./startup.sql:/docker-entrypoint-initdb.d/startup.sql
- postgresdata:/var/lib/postgresql/data
ports:
- 5432:5432
mywebapp:
container_name: "mywebapp"
image: openjdk:10-jre-slim
hostname: mywebapp
volumes:
- ./lib:/home/lib
- ./mywebapp-1.0.1-SNAPSHOT-exec.jar:/home/mywebapp-1.0.1-SNAPSHOT-exec.jar
entrypoint:
- java
- -jar
- -Djava.library.path=/home/lib
- /home/mywebapp-1.0.1-SNAPSHOT-exec.jar
environment:
- LD_LIBRARY_PATH=/home/lib
- spring.datasource.url=jdbc:postgresql://postgresql:5432/mywebapp
- spring.cassandra.contactpoints=cassandra
- spring.cassandra.port=9042
- spring.cassandra.keyspace=mywebapp
#- spring.datasource.username=postgres
#- spring.datasource.password=postgres
#- spring.jpa.hibernate.ddlAuto=update+
ports:
- 8443:8443
- 8080:8080
depends_on:
- cassandra
卷:postgresdata:
谢谢大家
解决方案
我假设您的 Web 应用程序需要在启动时运行 cassandra 服务。您应该向您的 Web 应用程序服务添加depends_on
条目,以便 docker 仅在 cassandra 启动时启动它
并且该links
条目不是必需的,因为 docker 会自动将服务名称用作为此 docker-compose 项目创建的网络中的主机名。同样适用于network_type: bridge
- 这是默认的网络类型,所以你可以在你的情况下省略它。
推荐阅读
- c++ - Stoi 不是 std 的成员
- google-bigquery - 跨各种 BigQuery 表分布数据
- php - 如何在运行 PHP 的 Docker 容器中自动启动 cron?
- sql-server-2014 - 适用于 SQL Server 2014 或更早版本的时态表功能
- reactjs - Redux 减速器状态在安装组件时返回 NaN 值,但在更新时工作正常
- networking - 在动态 IP 上托管我的世界服务器的安全方式
- python - 如何在 pandas.Timestamp.today() 函数中只保留日期 YYYY-MM-DD?
- c++ - 如何从 Windows 为 Linux 编译 C++ 代码(Dev-Cpp)
- c# - 如何判断 Skia 阴影所需的空间量
- bigcommerce - 在 Windows 10 上运行 Big Commerce 的 Stencil CLI