【发布时间】:2021-02-26 17:59:45
【问题描述】:
尝试为rabbitmq和其他一些服务构建开发环境。阅读 docker hub 后,我应该能够通过访问 http://container-ip:15672 获取在此处 (https://hub.docker.com/_/rabbitmq/) 找到的图像后访问 RabbitMQ 管理。这对我不起作用。如果我公开端口 15672,以便 localhost:15672 映射到容器 15672,我可以通过 http://localhost:15672 访问预期的输出。对 docker 来说仍然很新,所以认为我在这里缺少一些关于网络的基本知识。如果可能的话,我宁愿不要像那样绑定本地主机上的端口。
Dockerfile
FROM rabbitmq:3-management
RUN apt-get update \
&& apt-get install -y --no-install-recommends vsftpd \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /var/run/vsftpd/empty \
&& mkdir -p /etc/vsftpd \
&& mkdir -p /var/ftp \
&& mv /etc/vsftpd.conf /etc/vsftpd.orig \
&& mkdir -p /etc/service/vsftpd
ADD vsftpd.sh /etc/service/vsftpd/run
VOLUME ["/var/ftp"]
EXPOSE 20-21
EXPOSE 65500-65515
DockerRun.bat
docker build -t dev-environment .
docker run -d --hostname my-rabbit --name some-rabbit -it dev-environment
docker inspect --format "RabbitMQ management @ http://{{ .NetworkSettings.IPAddress }}:15672" some-rabbit
来自 docker 检查的输出
docker inspect --format "RabbitMQ management @ http://172.17.0.2:15672" some-rabbit
【问题讨论】:
-
为什么要安装 FTP 守护程序?为什么要查找容器专用 IP 地址?你是如何启动容器的(你有什么
docker run -p选项)?当您尝试调用 localhost:15672 时会出现什么错误? -
嘿@DavidMaze 我正在安装一个 FTP 守护程序,因为我正在处理的开发项目正在设置一个现代事件系统,该系统将在旧系统将 FTP 上传到某个位置时做出响应。我已经用现场机器证明了该系统,但我的公司希望我将系统容器化以进行测试和开发。运行命令在上面的 .bat 文件中。我希望我不必使用 -p 并绑定本地端口。我已经能够通过这样做并让它在本地主机上工作来让它工作。我希望在没有我链接的中心页面的情况下让它工作。
-
你需要两个独立的容器,而且你几乎总是需要一个
-p选项来使端口可以从容器外部访问。docker inspectIP 地址是一个实现细节,在许多常见上下文中不起作用(包括它在 Windows 主机上根本不起作用)。 -
啊,所以 Docker for Windows 的功能不起作用?好吧,这可能是事情。该文档特别说明您不必使用 -p 并且可以通过内部 ip 进行连接。这将是本地测试环境的首选方法,因此它不会干扰其他事情。我可以做一个 docker compose 文件并使用 2 个不同的容器。我对 docker 很陌生,这是我第一次使用它。所以任何见解都是有帮助的。