我在Mac上运行多容器应用程序时遇到了一些问题。我有3个容器协同工作:2个简单的web (.NET Core)和官方容器RabbitMQ,即使用RabbitMq服务的2API交换事件。应用程序从中正确运行,当Api1收到一篇文章时,它在DB上创建一些数据并使用兔子发送消息给Api2;Api2接收Api1发送的消息,两个api在本地主机上都是可见的.到目前一切尚好。
当我尝试将应用程序从Visual调试移到Docker时,我遇到了一些问题,我的想法是使用VS在docker的CLI上生成的docker组合文件(docker-复合向上),按照我所做的操作顺序:
1)执行对接器-从Docker中构建,在docker中存在容器的构建失败(我希望在调试期间执行相同的停靠器-组合,所以我希望得到相同的结果,但可能我错了)。解决方案:我已经删除了构建并使用了VS在上一次调试测试期间创建的映像(仍然可以在停靠映像本地存储库中使用),这绕过了构建问题(无论如何,我必须调查原因,但让我们转到下一点)
2)在第1步之后,我可以运行对接器--没有错误地编写,但是带有2个apis的两个容器立即退出,代码0,RabbitMQ容器没有任何问题,并按预期的方式继续运行。解决方案:为了解决这个奇怪的问题,我添加了和tty:docker中的
3)在第2步之后,我执行了docker-compose up,并且能够看到所有容器都正确运行,但是在localhost上已经不能再访问2个api容器了(相关端口已经公开并发布了),所以我不能再向api发送任何POST请求了。
我不是Docker的专家,但是运行这个简单的多容器应用程序花费了我比预期更多的时间,而且我仍然有疑问和问题,任何建议都是非常欢迎的。
谢谢
发布于 2020-05-06 20:22:19
我已经找到并解决了所有问题,我在这里报告,因为我认为对其他人应该有用:
1)此问题与VS 2019年中的错误有关,当您在解决方案中包含一些不在解决方案文件夹中的项目(在我的示例类库中)时,会为dockerfile中的COPY命令生成错误的目标路径,因此生成失败。我已经向微软报告了问题:同时,Dockerfile中的错误复制命令正在等待修复,您可以将解决方案中使用的所有项目都放在同一个解决方案文件夹中,这样可以避免在dockerfile中生成的错误路径,从而避免生成过程的失败。
2)这个问题只存在于由docker创建的图像中(通常您可以通过标签“dev”来识别它们),这些映像对于调试很有用,但在调试之外不使用它们。一旦不动点1,就正确地执行了使用docker创建映像,并且映像按预期工作(没有添加stdin_open:true和tty:docker中的真)。
3)利用第1点所生成的图像解决了这一问题。
https://stackoverflow.com/questions/61541340
复制相似问题