Mongodb docker compose:我的容器彼此连接,但不';无法连接到主机

Mongodb docker compose:我的容器彼此连接,但不';无法连接到主机,mongodb,spring-boot,docker,docker-compose,dockerfile,Mongodb,Spring Boot,Docker,Docker Compose,Dockerfile,我在docker compose管理的两个容器中有一个spring boot应用程序和一个mongodb。该应用程序似乎很好地连接到mongodb,但外部(即我的本地机器)都无法访问它们。我想我需要一些专家的建议,这里 1)安装基数: version: "3.7" services: app: build: . restart: unless-stopped container_name: project-service ports:

我在docker compose管理的两个容器中有一个spring boot应用程序和一个mongodb。该应用程序似乎很好地连接到mongodb,但外部(即我的本地机器)都无法访问它们。我想我需要一些专家的建议,这里

1)安装基数:

version: "3.7"

services:
   app:
      build: .
      restart: unless-stopped
      container_name: project-service
      ports:
         - target:  8080
           published: 8080
      networks:
         - project-net
      working_dir: /app
      depends_on:
         - db

   db:
      image: mongo
      container_name: project-db
      volumes:
         - type: volume
           source: project-data
           target: /data/db
           volume:
             nocopy: true
      restart: unless-stopped
      ports:
         - target: 27017
           published: 27017
      networks:
         - project-net

networks:
   project-net:

volumes:
   project-data:
  • Docker版本19.03.4,内部版本9013bf583a

  • docker compose版本1.24.1,版本4667896b

2)docker compose.yml:

version: "3.7"

services:
   app:
      build: .
      restart: unless-stopped
      container_name: project-service
      ports:
         - target:  8080
           published: 8080
      networks:
         - project-net
      working_dir: /app
      depends_on:
         - db

   db:
      image: mongo
      container_name: project-db
      volumes:
         - type: volume
           source: project-data
           target: /data/db
           volume:
             nocopy: true
      restart: unless-stopped
      ports:
         - target: 27017
           published: 27017
      networks:
         - project-net

networks:
   project-net:

volumes:
   project-data:
3)应用程序摘要文件:

FROM maven:latest AS service
WORKDIR /src/fscl/project-service
COPY . .
RUN mvn -B -f pom.xml dependency:resolve
RUN mvn -B package -DskipTests

FROM openjdk:8-jdk-alpine AS runtime
RUN apk update && apk add bash
RUN mkdir -p /app
WORKDIR /app
COPY --from=service /src/fscl/project-service/target/project-service-0.2.0.jar .
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/project-service-0.2.0.jar"]
 curl localhost:8080/api/v4/projects
4)运行时的状态:

version: "3.7"

services:
   app:
      build: .
      restart: unless-stopped
      container_name: project-service
      ports:
         - target:  8080
           published: 8080
      networks:
         - project-net
      working_dir: /app
      depends_on:
         - db

   db:
      image: mongo
      container_name: project-db
      volumes:
         - type: volume
           source: project-data
           target: /data/db
           volume:
             nocopy: true
      restart: unless-stopped
      ports:
         - target: 27017
           published: 27017
      networks:
         - project-net

networks:
   project-net:

volumes:
   project-data:
$docker整理&

相关日志:

project-service | 2019-11-08 15:33:09.688  INFO 1 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[project-db:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
project-db | 2019-11-08T15:33:09.755+0000 I  NETWORK  [listener] connection accepted from 172.20.0.3:41964 #1 (1 connection now open)
project-db | 2019-11-08T15:33:09.771+0000 I  NETWORK  [conn1] received client metadata from 172.20.0.3:41964 conn1: { driver: { name: "mongo-java-driver|legacy", version: "3.11.1" }, os: { type: "Linux", name: "Linux", architecture: "amd64", version: "4.4.0-124-generic" }, platform: "Java/IcedTea/1.8.0_212-b04" }
project-service | 2019-11-08 15:33:09.809  INFO 1 --- [roject-db:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:1, serverValue:1}] to project-db:27017
project-service | 2019-11-08 15:33:11.305  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
project-service | 2019-11-08 15:33:11.310  INFO 1 --- [           main] f.p.ProjectServiceApplication            : Started ProjectServiceApplication in 5.538 seconds (JVM running for 6.383)
$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                      NAMES
aecb3d4bb468        project-service_app   "java -jar /app/proj…"   About an hour ago   Up 2 minutes        0.0.0.0:8080->8080/tcp     project-service
257985d48264        mongo                 "docker-entrypoint.s…"   3 hours ago         Up 2 minutes        0.0.0.0:27017->27017/tcp   project-db
从这一点来看,一切进展顺利,但没有:

5)问题:

FROM maven:latest AS service
WORKDIR /src/fscl/project-service
COPY . .
RUN mvn -B -f pom.xml dependency:resolve
RUN mvn -B package -DskipTests

FROM openjdk:8-jdk-alpine AS runtime
RUN apk update && apk add bash
RUN mkdir -p /app
WORKDIR /app
COPY --from=service /src/fscl/project-service/target/project-service-0.2.0.jar .
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/project-service-0.2.0.jar"]
 curl localhost:8080/api/v4/projects
应该返回一个JSON对象,但它不返回。该应用程序也没有显示日志记录反应。我的服务应用程序没有任何内容

$  mongo
MongoDB shell version v3.4.10
connecting to: mongodb://127.0.0.1:27017
永远挂着

$  mongo project-db:27017
MongoDB shell version v3.4.10
connecting to: project-db:27017
2019-11-08T16:42:26.869+0100 I NETWORK  [thread1] getaddrinfo("project-db") failed: Name or service not known
2019-11-08T16:42:26.869+0100 E QUERY    [thread1] Error: couldn't initialize connection to host project-db, address is invalid :
connect@src/mongo/shell/mongo.js:237:13
@(connect):1:6
exception: connect failed

$ mongo localhost:27017
MongoDB shell version v3.4.10
connecting to: localhost:27017
也挂了


我相信我已经遵循了所有的例子,但是我到底需要做什么不同呢?

你的主机操作系统是什么?它是什么类型的Docker(特别是基于Docker机器还是Docker工具箱)?您在哪里运行
curl localhost:8080/api/v4/projects
?在主机上?如果在应用程序容器中运行,它是否会返回预期结果?同意@rok运行
docker compose exec app curl localhost:8080/api/v4/projects
,并发布结果。我还要做的是使用telnet从主机
telnet localhost 8080
检查端口,即使
docker ps
显示端口映射正确。在容器中看到它也不会有什么坏处。@David Maze:LSB版本:core-9.20160110ubuntu0.2-amd64:core-9.20160110ubuntu0.2-noarch:printing-9.20160110ubuntu0.2-amd64:printing-9.20160110ubuntu0.2-noarch:security-9.20160110ubuntu0.2-amd64:security-9.20160110ubuntu0.2-noarch@rok李曼:我在主机的终端上运行curl。我目前没有在容器中安装curl,但是ping-inside可以工作:docker-compose-exec-app/bin/bash-bash-4.4#ping-localhost:8080 ping-localhost:8080(127.0.0.1):56数据字节127.0.0.1中的64字节:seq=0 ttl=64时间=0.082 ms 127.0.1中的64字节:seq=1 ttl=64时间=0.084 ms 127.0.0.1中的64字节:seq=2 ttl=64时间=0.080 ms。。。