如何从Docker化的Spring Boot连接到Docker化的Couchbase服务器

huangapple go评论109阅读模式
英文:

How to connect dockerized couchbase server from dockerized spring boot

问题

以下是您提供的内容的翻译:

我创建了一个简单的 Spring Boot 和 Couchbase 应用,现在想将它们容器化。

我为 Spring Boot 创建了 Dockerfile:

  1. FROM maven:3.6.0-jdk-8-slim AS build
  2. RUN mkdir -p /workspace
  3. WORKDIR /workspace
  4. COPY pom.xml /workspace
  5. COPY src /workspace/src
  6. RUN mvn -f pom.xml clean package
  7. FROM openjdk:8
  8. COPY --from=build /workspace/target/*.jar app.jar
  9. EXPOSE 8080
  10. ENTRYPOINT ["java","-jar","app.jar"]

以及我的 Couchbase 的 Dockerfile:

  1. FROM couchbase
  2. RUN chmod +x /entrypoint.sh
  3. COPY configure-server.sh /opt/couchbase
  4. RUN chmod +x /opt/couchbase/configure-server.sh
  5. CMD ["/opt/couchbase/configure-server.sh"]

以及 Docker-compose:

  1. version: '3.0'
  2. services:
  3. couchbase:
  4. build: ./couchbase
  5. container_name: couchbase
  6. volumes:
  7. - ~/couchbase/node1:/opt/couchbase/var
  8. ports:
  9. - 8091:8091
  10. - 8092:8092
  11. - 8093:8093
  12. - 11210:11210
  13. todo_server:
  14. build: ./todo-backend
  15. container_name: todo_server
  16. depends_on:
  17. - couchbase
  18. ports:
  19. - 8080:8080

当我尝试运行 docker-compose up couchbase 并在本地运行 Spring Boot 时,它们可以一起工作。但是当我尝试使用 docker-compose up 时,Spring 应用无法连接到 Couchbase 服务器。

我猜这是由于 localhost 导致的。

在 Spring 中,我的 Couchbase 配置如下:

  1. @Configuration
  2. public class CouchbaseConfiguration extends AbstractCouchbaseConfiguration {
  3. @Override
  4. public String getConnectionString() {
  5. return "couchbase://127.0.0.1";
  6. }
  7. @Override
  8. public String getUserName() {
  9. return "Administrator";
  10. }
  11. @Override
  12. public String getPassword() {
  13. return "password";
  14. }
  15. @Override
  16. public String getBucketName() {
  17. return "default";
  18. }
  19. @Override
  20. protected boolean autoIndexCreation() {
  21. return true;
  22. }
  23. }

我认为我需要更改这一部分:

  1. public String getConnectionString() {
  2. return "couchbase://127.0.0.1";
  3. }

我尝试过只用 couchbasecouchbase://couchbase,但都不起作用。

控制台上的错误信息如下:

  1. com.couchbase.client.core.deps.io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) failed: Connection refused: /127.0.0.1:11210
  2. Caused by: java.net.ConnectException: finishConnect(..) failed: Connection refused
  3. at com.couchbase.client.core.deps.io.netty.channel.unix.Errors.throwConnectException(Errors.java:124) ~[core-io-2.0.8.jar:na]
  4. at com.couchbase.client.core.deps.io.netty.channel.unix.Socket.finishConnect(Socket.java:243) ~[core-io-2.0.8.jar:na]
  5. at com.couchbase.client.core.deps.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.doFinishConnect(AbstractEpollChannel.java:672) ~[core-io-2.0.8.jar:na]
  6. at com.couchbase.client.core.deps.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.finishConnect(AbstractEpollChannel.java:649) ~[core-io-2.0.8.jar:na]
  7. at com.couchbase.client.core.deps.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.epollOutReady(AbstractEpollChannel.java:529) ~[core-io-2.0.8.jar:na]
  8. at com.couchbase.client.core.deps.io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:465) ~[core-io-2.0.8.jar:na]
  9. at com.couchbase.client.core.deps.io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) ~[core-io-2.0.8.jar:na]
  10. at com.couchbase.client.core.deps.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[core-io-2.0.8.jar:na]
  11. at com.couchbase.client.core.deps.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[core-io-2.0.8.jar:na]
  12. at com.couchbase.client.core.deps.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[core-io-2.0.8.jar:na]
  13. at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_212]

您能帮助我吗?

英文:

I create a simple spring boot and couchbase app and I want to dockerized it.

I create Dockerfile for Spring Boot:

  1. FROM maven:3.6.0-jdk-8-slim AS build
  2. RUN mkdir -p /workspace
  3. WORKDIR /workspace
  4. COPY pom.xml /workspace
  5. COPY src /workspace/src
  6. RUN mvn -f pom.xml clean package
  7. FROM openjdk:8
  8. COPY --from=build /workspace/target/*.jar app.jar
  9. EXPOSE 8080
  10. ENTRYPOINT ["java","-jar","app.jar"]

and my couchbase's dockerfile:

  1. FROM couchbase
  2. RUN chmod +x /entrypoint.sh
  3. COPY configure-server.sh /opt/couchbase
  4. RUN chmod +x /opt/couchbase/configure-server.sh
  5. CMD ["/opt/couchbase/configure-server.sh"]

And Docker-compose:

  1. version: '3.0'
  2. services:
  3. couchbase:
  4. build: ./couchbase
  5. container_name: couchbase
  6. volumes:
  7. - ~/couchbase/node1:/opt/couchbase/var
  8. ports:
  9. - 8091:8091
  10. - 8092:8092
  11. - 8093:8093
  12. - 11210:11210
  13. todo_server:
  14. build: ./todo-backend
  15. container_name: todo_server
  16. depends_on:
  17. - couchbase
  18. ports:
  19. - 8080:8080

If I try to docker-compose up couchbase and run spring boot locally they work together. But When I try to use docker-compose up, Spring App can not connect to couchbase server.

I guess this is caused by localhost

My Couchbase Config on Spring

  1. @Configuration
  2. public class CouchbaseConfiguration extends AbstractCouchbaseConfiguration {
  3. @Override
  4. public String getConnectionString() {
  5. return "couchbase://127.0.0.1";
  6. }
  7. @Override
  8. public String getUserName() {
  9. return "Administrator";
  10. }
  11. @Override
  12. public String getPassword() {
  13. return "password";
  14. }
  15. @Override
  16. public String getBucketName() {
  17. return "default";
  18. }
  19. @Override
  20. protected boolean autoIndexCreation() {
  21. return true;
  22. }
  23. }

I think I have to change this

  1. public String getConnectionString() {
  2. return "couchbase://127.0.0.1";
  3. }

I tried only couchbase and couchbase://couchbase but it doesn't work.

Errors on console:

  1. com.couchbase.client.core.deps.io.netty.channel.AbstractChannel$AnnotatedConnectException: finishConnect(..) failed: Connection refused: /127.0.0.1:11210
  2. Caused by: java.net.ConnectException: finishConnect(..) failed: Connection refused
  3. at com.couchbase.client.core.deps.io.netty.channel.unix.Errors.throwConnectException(Errors.java:124) ~[core-io-2.0.8.jar:na]
  4. at com.couchbase.client.core.deps.io.netty.channel.unix.Socket.finishConnect(Socket.java:243) ~[core-io-2.0.8.jar:na]
  5. at com.couchbase.client.core.deps.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.doFinishConnect(AbstractEpollChannel.java:672) ~[core-io-2.0.8.jar:na]
  6. at com.couchbase.client.core.deps.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.finishConnect(AbstractEpollChannel.java:649) ~[core-io-2.0.8.jar:na]
  7. at com.couchbase.client.core.deps.io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.epollOutReady(AbstractEpollChannel.java:529) ~[core-io-2.0.8.jar:na]
  8. at com.couchbase.client.core.deps.io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:465) ~[core-io-2.0.8.jar:na]
  9. at com.couchbase.client.core.deps.io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) ~[core-io-2.0.8.jar:na]
  10. at com.couchbase.client.core.deps.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[core-io-2.0.8.jar:na]
  11. at com.couchbase.client.core.deps.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[core-io-2.0.8.jar:na]
  12. at com.couchbase.client.core.deps.io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[core-io-2.0.8.jar:na]
  13. at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_212]

Can you help me?

答案1

得分: 2

我通过以下方式解决了这个问题。

我的新Docker Compose文件:

  1. version: '3.7'
  2. services:
  3. db:
  4. build: ./couchbase
  5. container_name: todo-couchbase
  6. volumes:
  7. - ~/couchbase/node1:/opt/couchbase/var
  8. ports:
  9. - 8091:8091
  10. - 8092:8092
  11. - 8093:8093
  12. - 11210:11210
  13. networks:
  14. - my_network
  15. todo_server:
  16. build: ./todo-backend
  17. container_name: todo-backend
  18. environment:
  19. COUCHBASE_HOST: db
  20. depends_on:
  21. - db
  22. ports:
  23. - 8080:8080
  24. networks:
  25. - my_network
  26. networks:
  27. my_network:
  28. driver: bridge

我修改了连接字符串:

  1. public String getConnectionString() {
  2. return "db";
  3. }
英文:

I solved this problem by doing the following.

My new Docker-compose file:

  1. version: '3.7'
  2. services:
  3. db:
  4. build: ./couchbase
  5. container_name: todo-couchbase
  6. volumes:
  7. - ~/couchbase/node1:/opt/couchbase/var
  8. ports:
  9. - 8091:8091
  10. - 8092:8092
  11. - 8093:8093
  12. - 11210:11210
  13. networks:
  14. - my_network
  15. todo_server:
  16. build: ./todo-backend
  17. container_name: todo-backend
  18. environment:
  19. COUCHBASE_HOST: db
  20. depends_on:
  21. - db
  22. ports:
  23. - 8080:8080
  24. networks:
  25. - my_network
  26. networks:
  27. my_network:
  28. driver: bridge

and I changed connection string

  1. public String getConnectionString() {
  2. return "db";
  3. }

huangapple
  • 本文由 发表于 2020年9月11日 19:43:16
  • 转载请务必保留本文链接:https://go.coder-hub.com/63846409.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定