我试图从部署一个旨在在桌面上运行的应用程序的角度来绕过Docker.我的应用程序只是一个烧瓶Web应用程序和mongo数据库.通常我会在VM中安装它们,并将主机端口转发到来宾Web应用程序.我想尝试一下Docker,但我不确定我打算如何使用多个程序.文件说只有ENTRYPOINT,所以我怎么能有Mongo和我的烧瓶申请.或者他们需要在单独的包含中,在这种情况下他们如何相互交谈以及这如何使分发应用程序变得容易?
我已经从Dockerfile构建了一个名为centos + ssh的基本映像.在centos + ssh的Dockerfile中,我使用CMD来运行ssh服务.
然后我想构建一个运行其他服务的图像,名为rabbitmq,Dockerfile:
FROM centos+ssh
EXPOSE 22
EXPOSE 4149
CMD /opt/mq/sbin/rabbitmq-server start
Run Code Online (Sandbox Code Playgroud)
要启动rabbitmq容器,请运行:
docker run -d -p 222:22 -p 4149:4149 rabbitmq
Run Code Online (Sandbox Code Playgroud)
但ssh服务不起作用,感觉rabbitmq的Dockerfile CMD覆盖了centos的CMD.
这docker-compose.yml似乎工作正常:
version: '3'
services:
web:
image: web-app
command: bundle exec rackup
ports:
- "9292:9292"
links:
- redis
redis:
image: redis
Run Code Online (Sandbox Code Playgroud)
命令:
docker build -t web-app .; docker-compose up
Run Code Online (Sandbox Code Playgroud)
Web App期待REDIS_URL配置.Web App Dockerfile:
ENV REDIS_URL redis:6379
Run Code Online (Sandbox Code Playgroud)
似乎Web App无法连接到Redis:
Redis::CannotConnectError - Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED):
Run Code Online (Sandbox Code Playgroud)
那么,Web应用程序的Redis URL是什么?
我需要暴露Redis端口(6379)吗?
编辑:
感谢@Andy Shinn,我看到redis url应该是redis://6379.
现在我明白了Errno::EINVAL - Invalid argument - connect(2) for 0.0.24.235:6379.这可能与Redis v 3.2.8有关.我会尝试另一个版本,看看它是否有效.
编辑#2:
3.2.8适用于我本地计算机上的应用程序,因此不是问题.