Pat*_*atS 5 docker docker-compose
我正在尝试在单个节点上运行 docker swarm 并且无法将 docker 应用程序端口暴露给主机。
这类似于未公开的 Docker swarm 服务端口,但我在单个节点中运行,并提供有关我的问题和研究的更多详细信息。
例如,给定以下 myapp.yml 文件:
version: "3"
services:
app:
image: myapp
ports:
- "8123:8123"
Run Code Online (Sandbox Code Playgroud)
堆栈通过
docker stack deploy -c myapp.yml myapp
堆栈启动后,当我尝试访问端口(通过 curl)时,它失败了。例如,
curl -v http://localhost:8123/myapp
显示连接被拒绝(没有在该端口上侦听)。
以下命令启动映像并显示如何验证端口是否已公开。
docker run -p 8123:8123 --name myapp myapp
卷曲然后工作。
curl -v http://localhost:8123/myapp
提供在 docker 中运行的应用程序的输出。
当我docker ps 在 PORTS 部分运行输出时显示:0.0.0.0:8123:8123/tcp.
docker network inspect bridge- 显示 docker 容器已分配给桥接网络。docker 网桥网络默认与 docker run 命令一起使用。
命令docker port myapp显示:
8123/tcp -> 0.0.0.0:8123
它与docker ps PORT字段的输出相匹配。
开始使用后docker stack deploy -c myapp.yml myapp,我运行docker ps命令并且只8123/tcp在输出的PORTS字段中看到。
该命令docker port myapp没有输出(表明 docker 主机没有可用的端口。
当我运行时docker network ls,我看到:
NETWORK ID NAME DRIVER SCOPE
1234567890 bridge bridge local
9999999999 myapp_default overlay swarm
Run Code Online (Sandbox Code Playgroud)
所以我注意到网络myapp_default与桥接、本地处于不同的模式。我尝试使用现有的桥接网络,但是当我在堆栈/撰写文件中引用桥接网络时,我观察到网络myapp_bridge已创建。
所以我阅读了 docker 网络https://blog.alexellis.io/docker-stacks-attachable-networks/是一篇很好的文章。
到目前为止,我还没有让它工作,所以我起草了这个来寻求建议/帮助。
注意:这篇文章(日期为 2017 年 2 月)说它应该有效,但没有解决我的问题。
我想我很接近了。
https://docs.docker.com/v17.12/get-started/part5/ - 是 docker 堆栈技术的 docker 主要文档。但是在该页面上搜索网络显示没有任何用处。
https://blog.alexellis.io/docker-stacks-attachable-networks/ - 写得很好。
Docker swarm 服务端口未公开- 类似于我问的问题。
https://runnable.com/docker/basic-docker-networking - 撰写关于 docker 网络的文章。它在创建覆盖网络时说明以下内容(这是使用 docker stack deploy 时的默认设置)。
这些网络需要有效的键值存储服务,例如 Consul、Etcd 或 ZooKeeper。在创建网络之前,您必须安装和配置您的键值存储服务。
成群结队
ports:
- "8123:8123"
Run Code Online (Sandbox Code Playgroud)
将公开所有 swarm 节点上的端口,如果其他服务使用某些节点上的端口,您可能会遇到问题
您只能使用下一个 docker-compose.yml 配置在带有容器的主机上公开端口
services:
app:
ports:
- target: 8123
published: 8123
mode: host
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8557 次 |
| 最近记录: |