我有一个容器,它具有多个端口,我想以远程方式访问此Docker外部的端口之一(9001
)。
172.17.0.1
172.19.0.23
192.168.1.131
我已经搜索过该关键字,但发现了expose port
关键字,但确实没有用。
如何公开docker端口以使您的容器可外部访问
Reference
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
?
[注意]:
在createDB.sh
中运行多项操作,例如在以下位置创建 ZMQ
9001
端口。
我已经使用$ ufw allow 9001
任何帮助将不胜感激。
答案 0 :(得分:1)
如果要实际映射端口,则应使用
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文档
答案 1 :(得分:0)
问题通过以下说明解决:
在ZMQ应用(在ivms
容器中)中,我曾使用服务器IP来绑定连接,如下所示:
import zmq
if __name__ == '__main__':
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.setsockopt(zmq.SUBSCRIBE, "")
socket.bind("tcp://192.168.1.131:9001") # doesn't work with server or docker IP
while True:
data = socket.recv_json()
它只能按以下方式工作:
socket.bind("tcp://192.168.1.131:9001") # works, but can't access as remote
socket.bind("tcp://*:9001") # Works both locally and remotely.
这是我的docker-compose.yml配置:
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"
ports:
- "9001:9001"