docker - 如何使用 docker-compose 在 docker/container 之外公开容器端口?
问题描述
我有一个容器,它有几个端口,我想9001
远程访问这个 docker 之外的一个端口()。
- 我的码头 IP 是:
172.17.0.1
- 我的容器 IP 是:
172.19.0.23
- 我的服务器IP是:
192.168.1.131
我已经搜索过,我找到了expose port
关键字,我做到了,但没有奏效。
如何公开 docker 端口以使您的容器可从外部访问
参考
这是我的 docker-compose 文件:
version: '3'
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "8010:8010"
volumes:
- .:/code
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
links:
- ivms
restart: unless-stopped
ivms:
build: .
container_name: ivms
command: bash bashes/createDB.sh
volumes:
- .:/code
expose:
- "8010"
- "9001" # exposed disired port
ports:
- "9001:9001"
我在 docker-compose 文件上方运行:$ docker-compose up -d
- 但是当我使用
server_IP:9001 --> 192.168.1.131:9001
或docker_IP:9001 --> 172.17.0.1:9001
无法访问时(在远程或本地模式下) - 但是当
container_IP:9001 --> 172.19.0.23:9001
在本地使用它时。
我应该怎么做才能访问server_IP:9001 --> 192.168.1.131:9001
?
[注意]:
In
createDB.sh
运行多个操作,例如在port上创建ZMQ9001
。我之前已经设置了允许的端口,使用
$ ufw allow 9001
- 我在 Ubuntu 16.04 和 Ubuntu-Server 16.04 上试过
任何帮助,将不胜感激。
解决方案
如果你想实际映射你应该使用的端口
ivms:
build: .
container_name: ivms
command: bash bashes/createDB.sh
volumes:
- .:/code
ports:
- "8010:8010"
- "9001:9001" # now you can access them locally
警告您对这两个服务 ivms 和 nginx 使用相同的端口
EXPOSE 指令通知 Docker 容器在运行时侦听指定的网络端口。可以指定端口监听 TCP 还是 UDP,如果不指定协议,则默认为 TCP。
EXPOSE 指令实际上并不发布端口。它充当构建映像的人和运行容器的人之间的一种文档类型,关于打算发布哪些端口。-Docker 文档
推荐阅读
- ios - FCM 是直接发送推送通知还是向 APNS 发送消息?
- python - 将 Tensorflow 中除最大值之外的所有值归零
- can-bus - 接收 Can BUS 帧 Qt 和 PeakCan USB 适配器
- javascript - 提交后弹出消息
- random-forest - 如何确保随机森林中的所有树都包含一个特征
- ruby - 传出帖子时出现 TCP 连接错误
- php - 在 Wordpress 中集成 Twilio PHP
- javascript - django 和 javascript API
- php - foreach PHP 中的 echo JSON 对象出错
- machine-learning - 拆分数据集