我正在使用Orion Context Broker(在docker容器中(,我需要它来连接MongoDB(在它自己的docker容器内(。同时,我必须拒绝从外部源到27017的所有传入业务,因为在运行docker compose之后;暴露的";公开。
以上所有内容均使用Ubuntu 20.04。
这是我的docker-compose.yml
文件
version: "3.5"
services:
orion:
image: fiware/orion-ld
hostname: orion
container_name: fiware-orion
expose:
- "1026"
ports:
- "1026:1026"
depends_on:
- mongo-db
command: -dbhost mongo-db -logLevel DEBUG
mongo-db:
image: mongo:3.6
hostname: mongo-db
container_name: db-mongo
ports:
- "27017:27017"
networks:
- default
command: --nojournal
volumes:
- mongo-db:/data
volumes:
mongo-db: ~
172.18.0.3
是提供给Orion的docker容器的内部IP。因此,我尝试将--bind_ip 172.18.0.3
添加到docker compose文件中的command
mongo_db参数中,但这会中断docker-compose up
进程,并出现以下错误:
db-mongo | 2022-01-12T13:17:56.650+0000 E STORAGE [initandlisten] Failed to set up listener: SocketException: Cannot assign requested address
这是我的ubuntu防火墙规则(我刚刚了解到docker绕过[*](
OpenSSH ALLOW Anywhere
1026 ALLOW Anywhere
27017 DENY Anywhere
27017 ALLOW 127.0.0.1
27017 ALLOW 172.18.0.3
OpenSSH (v6) ALLOW Anywhere (v6)
1026 (v6) ALLOW Anywhere (v6)
27017 (v6) DENY Anywhere (v6)
[*]https://www.techrepublic.com/article/how-to-fix-the-docker-and-ufw-security-flaw/我也做了教程建议的修复,但如果重新启动docker,那么(出于某种未知原因(我将停止访问1026端口,这应该是唯一的公共端口。
Composeports:
设置使容器可以从Docker空间外部访问。容器之间的连接不需要(或不使用(它。删除此项应满足您的需要。
version: '3.8'
services:
orion:
image: fiware/orion-ld
ports:
- "1026:1026" # accessible from host port 1026
depends_on:
- mongo-db
command: -dbhost mongo-db -logLevel DEBUG
# same hostname ^^^^^^^^ and default MongoDB port 27017
# vvvvvvvv
mongo-db:
image: mongo:3.6
command: --nojournal
volumes:
- mongo-db:/data
# no ports:, not accessible from outside Docker
volumes:
mongo-db:
(我还从这个设置中删除了不必要的container_name:
、hostname:
、networks:
和expose:
选项;它们没有区别,Compose堆栈在没有它们的情况下应该可以正常工作。(
将其放在自己的网络上(即新的docker网络:orion_net(,只公开您需要的端口。目前您在";默认";网络,这是共享的。