我的docker映像可以与运行在同一台机器上的数据库连接吗?

8e2ybdfx  于 2021-06-13  发布在  Cassandra
关注(0)|答案(3)|浏览(362)

我创造了一个 docker 我的web应用程序的图像。我有一个 cassandra 数据库在我的笔记本电脑上运行,我正在启动 container 从同一台笔记本电脑上下载我的web应用程序。这个 uri 无法连接到数据库 localhost:9042 . 但是,映像无法与数据库连接。我是否需要对容器进行一些网络配置以连接到数据库?

[trace] CassandraRepositoryComponents - database will connect using parameters uri: cassandra://localhost:9042/, cluster name: myCluster
[trace] s.d.c.CassandraConnectionUri - created logger Logger[services.db.cassandra.CassandraConnectionUri]
[trace] s.d.c.CassandraConnectionManagementService - creating session with uri CassandraConnectionUri(cassandra://localhost:9042/) and cluster name myCluster
[trace] s.d.c.CassandraConnectionManagementService - exception in connecting with database com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1:9042 (com.datastax.driver.core.exceptions.TransportException: [localhost/127.0.0.1:9042] Cannot connect))
Oops, cannot start the server.

docker文件

FROM openjdk:8
RUN mkdir deploy
WORKDIR deploy
COPY target/universal/myapp-1.0.zip .

COPY conf/logback_dev.xml ./logback.xml
COPY conf/application_dev.conf ./application.conf
RUN unzip myapp-1.0.zip
RUN chmod +x myapp-1.0/bin/myapp
EXPOSE 9000
ENTRYPOINT myapp-1.0/bin/myapp -Dplay.http.secret.key=changemeplease -Dlogger.file=/deploy/logback.xml -Dconfig.file=/deploy/application.conf

cassandra作为一个独立的应用程序运行

qojgxg4l

qojgxg4l1#

从docker容器的内部引用“how do i connect to the localhost of the machine?”,我将uri字符串改为connect to cassandra to cassandra://host.docker.internal:9042/ . 现在应用程序启动了!!!
而且,似乎 host.docker.internal Map到主网络接口的ip地址。当我想跑的时候 cqlsh (在另一个跑步实验中) cassandra 以及通过 docker -无法在win10 home上启动cassandra docker映像),我注意到了这一点。

C:\Users\manuc>cqlsh host.docker.internal 9042
Connection error: ('Unable to connect to any servers', {'192.168.1.12': error(10061, "Tried connecting to [('192.168.1.12', 9042)]. Last error: No connection could be made because the target machine actively refused it")})

另外,ping host.docker.internal

Pinging host.docker.internal [192.168.1.12] with 32 bytes of data:
Reply from 192.168.1.12: bytes=32 time<1ms TTL=128
Reply from 192.168.1.12: bytes=32 time<1ms TTL=128
Reply from 192.168.1.12: bytes=32 time<1ms TTL=128
Reply from 192.168.1.12: bytes=32 time<1ms TTL=128

配置此域时 docker 安装在 etc/hostswindows ```

Added by Docker Desktop

192.168.1.12 host.docker.internal
192.168.1.12 gateway.docker.internal

To allow the same kube context to work on the host and the container:

127.0.0.1 kubernetes.docker.internal

End of section

qij5mzcb

qij5mzcb2#

运行docker容器 host 允许容器使用主机网络的网络模式。

docker run --network="host" -p 9000:9000 IMAGENAME

然后在上访问应用程序 http://localhost:9000 不应该看到任何错误。
1建议 Dockerfile ,你不必 mkdir 如果指定 WORKDIR 因为它会为你创造它。

FROM openjdk:8
WORKDIR deploy
COPY target/universal/myapp-1.0.zip .

COPY conf/logback_dev.xml ./logback.xml
COPY conf/application_dev.conf ./application.conf
RUN unzip myapp-1.0.zip
RUN chmod +x myapp-1.0/bin/myapp
EXPOSE 9000
ENTRYPOINT myapp-1.0/bin/myapp -Dplay.http.secret.key=changemeplease -Dlogger.file=/deploy/logback.xml -Dconfig.file=/deploy/application.conf
g6ll5ycj

g6ll5ycj3#

无法使用127.0.0.1访问主机上打开的端口。您需要找到分配给vm网络接口的ip(在mac和linux中您可以使用) ifconfig 命令)。从docker容器使用相同的ip访问cassandra。
另外,检查cassandra是否接受来自任何ip的连接。将此设置为0.0.0.0将侦听所有网络接口。在cassandra.yaml配置文件中进行以下更改:

rpc_address: 0.0.0.0

相关问题