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 实例