Java 如何从DockedSpring引导连接DockedCouchbase服务器
我创建了一个简单的spring boot和couchbase应用程序,我想将其固定 我为Spring Boot创建Dockerfile:Java 如何从DockedSpring引导连接DockedCouchbase服务器,java,spring-boot,docker,docker-compose,couchbase,Java,Spring Boot,Docker,Docker Compose,Couchbase,我创建了一个简单的spring boot和couchbase应用程序,我想将其固定 我为Spring Boot创建Dockerfile: FROM maven:3.6.0-jdk-8-slim AS build RUN mkdir -p /workspace WORKDIR /workspace COPY pom.xml /workspace COPY src /workspace/src RUN mvn -f pom.xml clean package FROM openjdk:8 COPY
FROM maven:3.6.0-jdk-8-slim AS build
RUN mkdir -p /workspace
WORKDIR /workspace
COPY pom.xml /workspace
COPY src /workspace/src
RUN mvn -f pom.xml clean package
FROM openjdk:8
COPY --from=build /workspace/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]
还有我的couchbase的dockerfile:
FROM couchbase
RUN chmod +x /entrypoint.sh
COPY configure-server.sh /opt/couchbase
RUN chmod +x /opt/couchbase/configure-server.sh
CMD ["/opt/couchbase/configure-server.sh"]
和Docker撰写:
version: '3.0'
services:
couchbase:
build: ./couchbase
container_name: couchbase
volumes:
- ~/couchbase/node1:/opt/couchbase/var
ports:
- 8091:8091
- 8092:8092
- 8093:8093
- 11210:11210
todo_server:
build: ./todo-backend
container_name: todo_server
depends_on:
- couchbase
ports:
- 8080:8080
如果我尝试docker组合couchbase
并在本地运行spring boot,它们会协同工作。但当我尝试使用docker compose up时,Spring应用程序无法连接到couchbase服务器
我猜这是由localhost引起的
我的沙发床配置在Spring上
@配置
公共类CouchbaseConfiguration扩展了AbstractCouchbaseConfiguration{
@凌驾
公共字符串getConnectionString(){
返回“couchbase://127.0.0.1";
}
@凌驾
公共字符串getUserName(){
返回“管理员”;
}
@凌驾
公共字符串getPassword(){
返回“密码”;
}
@凌驾
公共字符串getBucketName(){
返回“默认”;
}
@凌驾
受保护的布尔值autoIndexCreation(){
返回true;
}
}
我想我必须改变这个
公共字符串getConnectionString(){
返回“couchbase://127.0.0.1";
}
我只试了couchbase
和couchbase://couchbase
但它不起作用
控制台上的错误:
com.couchbase.client.core.deps.io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) failed: Connection refused: /127.0.0.1:11210
Caused by: java.net.ConnectException: finishConnect(..) failed: Connection refused
at com.couchbase.client.core.deps.io.netty.channel.unix.Errors.throwConnectException(Errors.java:124) ~[core-io-2.0.8.jar:na]
at com.couchbase.client.core.deps.io.netty.channel.unix.Socket.finishConnect(Socket.java:243) ~[core-io-2.0.8.jar:na]
at com.couchbase.client.core.deps.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.doFinishConnect(AbstractEpollChannel.java:672) ~[core-io-2.0.8.jar:na]
at com.couchbase.client.core.deps.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.finishConnect(AbstractEpollChannel.java:649) ~[core-io-2.0.8.jar:na]
at com.couchbase.client.core.deps.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.epollOutReady(AbstractEpollChannel.java:529) ~[core-io-2.0.8.jar:na]
at com.couchbase.client.core.deps.io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:465) ~[core-io-2.0.8.jar:na]
at com.couchbase.client.core.deps.io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) ~[core-io-2.0.8.jar:na]
at com.couchbase.client.core.deps.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[core-io-2.0.8.jar:na]
at com.couchbase.client.core.deps.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[core-io-2.0.8.jar:na]
at com.couchbase.client.core.deps.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[core-io-2.0.8.jar:na]
at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_212]
你能帮我吗?我通过以下操作解决了这个问题 我的新Docker撰写文件:
version: '3.7'
services:
db:
build: ./couchbase
container_name: todo-couchbase
volumes:
- ~/couchbase/node1:/opt/couchbase/var
ports:
- 8091:8091
- 8092:8092
- 8093:8093
- 11210:11210
networks:
- my_network
todo_server:
build: ./todo-backend
container_name: todo-backend
environment:
COUCHBASE_HOST: db
depends_on:
- db
ports:
- 8080:8080
networks:
- my_network
networks:
my_network:
driver: bridge
我改变了连接字符串
公共字符串getConnectionString(){
返回“db”;
}
Docker文档中描述了此处的网络环境。从todo_服务器
容器的角度来看,localhost
是自身,而不是另一个容器或物理主机。您应该能够使用另一个Compose服务名称couchbase
作为主机名。如果使用“couchbase”作为连接字符串,会出现什么错误?我解决了这个问题,我更改了本地主机部分并更改了docker Compose文件,我将在评论中共享新的docker Compose