Docker-compose 从链接迁移到网络 MongoDB 数据库问题

Posted

技术标签:

【中文标题】Docker-compose 从链接迁移到网络 MongoDB 数据库问题【英文标题】:Docker-compose migrating from links to networking MongoDB database issue 【发布时间】:2016-04-28 06:01:39 【问题描述】:

我正在尝试通过 Dockerfile 从使用网络链接进行迁移,但我遇到了一些问题。我将首先勾勒出我的原始设置:

原创 - 链接

Dockerfile:

FROM java:8
VOLUME /tmp
ADD docker_micro_maven-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8080
ENTRYPOINT ["java","-Dspring.data.mongodb.uri=mongodb://mongodb/micros", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

docker-compose.yml:

mongodb:
 image: mongo
employee:
 image: jdruwe/docker_micro_maven
 links:
  - mongodb
 ports:
  - "8080"

新功能 - 网络

Dockerfile:

FROM java:8
VOLUME /tmp
ADD docker_micro_maven-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8080
ENTRYPOINT ["java","-Dspring.data.mongodb.uri=mongodb://$MONGO_URI_DOCKER/micros", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

docker-compose.yml:

mongodb:
 container_name: "db"
 image: mongo
employee:
 image: jdruwe/docker_micro_maven
 environment:
  - MONGO_URI_DOCKER=db:27017
 ports:
  - "8080"

当我在 spring boot 应用程序中调用我的 rest 端点时(原始情况),我总是得到响应(一些 json 数据)。当我现在调用它时,我得到以下错误响应:


  "timestamp": 1453405937191,
  "status": 500,
  "error": "Internal Server Error",
  "exception": "org.springframework.dao.DataAccessResourceFailureException",
  "message": "Timed out after 10000 ms while waiting to connect. Client view of cluster state is type=Unknown, servers=[address=db:27017, type=Unknown, state=Connecting, exception=com.mongodb.MongoException$Network: Exception opening the socket, caused by java.net.UnknownHostException: db: unknown error]; nested exception is com.mongodb.MongoTimeoutException: Timed out after 10000 ms while waiting to connect. Client view of cluster state is type=Unknown, servers=[address=db:27017, type=Unknown, state=Connecting, exception=com.mongodb.MongoException$Network: Exception opening the socket, caused by java.net.UnknownHostException: db: unknown error]",
  "path": "/employee"

我用作参考的来自 Devoxx 的视频:https://youtu.be/aSATsLG59Zs?t=53m33s

似乎我一直在做错事,但我不确定它是什么,欢迎任何帮助。提前致谢!

【问题讨论】:

您是否开始使用--x-networking 选项进行撰写?此外,如果没有链接,则无法保证容器启动的顺序,因此可能会在 mongodb 容器启动并准备好接受连接之前发出请求。注意,在 Docker Compose 1.6 中,新的网络不再是实验性的,但需要使用 2.0 格式或 docker-compose 文件,见github.com/docker/compose/releases/tag/1.6.0-rc1 --x-networking 成功了,我真的需要开始使用 --help 命令。我正在使用“Docker 版本 1.9.1,构建 a34a1d5”和 docker-compose 版本 1.5.2,构建 e5cf49d。我可以升级我的 docker-compose 并将我的 docker 保持在那个版本吗? 我认为可以,但是 docker 1.10 中有更多增强功能可供 docker compose 使用,因此理想情况下,您应该在发布时同时升级它们 好的,非常感谢! 【参考方案1】:

在 docker-compose 1.5.x 中,新的网络仍然是一项实验性功能,需要使用 --x-networking 选项启用。

新的网络功能将在 docker-compose 1.6 中退出实验性功能,如果您的 docker-compose.yml 使用新的 (2.0) 文件格式,则会自动使用这些功能。

阅读 docker-compose 1.6-rc1 的发行说明以获取更多信息; https://github.com/docker/compose/releases/tag/1.6.0-rc1

【讨论】:

以上是关于Docker-compose 从链接迁移到网络 MongoDB 数据库问题的主要内容,如果未能解决你的问题,请参考以下文章

Docker 网络 - nginx:在上游找不到 [emerg] 主机

从 docker-compose 使用时,flyway 不接受迁移

docker - 如何将 mysql 数据从本地迁移到 ec2 实例

docker-compose:网络和链接之间的区别

从结构迁移到 Firebase 时,您的一个或多个项目在链接时遇到错误

从 Aliyun 经典网络迁移到 Aliyun VPC 网络