我正在使用wurstmeister中的docker image for kafka docker compose文件定义一个卷,例如 /var/run/docker.sock:/var/run/docker.sock 以上unix套接字的用途是什么?docker映像应该何时声明上述卷?
/var/run/docker.sock:/var/run/docker.sock
jdzmm42g1#
不需要挂载docker.sock文件,可以通过在kafka docker/dockerfile&start-kafka.sh中注解掉适当的行来避免。无需向kafka容器添加broker-list.sh。
olmpazwi2#
Kafka码头工程正在利用 docker 命令运行在 kafka 容器,以便反省docker环境。例如,它将确定播发的kafka端口,如下所示:
docker
kafka
export KAFKA_ADVERTISED_PORT=$(docker port `hostname` $KAFKA_PORT | sed -r "s/.*:(.*)/\1/g")
有一个 broker-list.sh 寻找Kafka经纪人的脚本如下:
broker-list.sh
CONTAINERS=$(docker ps | grep 9092 | awk '{print $1}')
为了运行 docker 在容器中,它需要访问 /var/run/docker.sock 主机上的插座。好吧,事实就是这样。以下只是我个人的看法:坦率地说,我认为这是一个糟糕的想法,应该能够访问docker套接字的容器只有那些显式管理容器的容器。还有其他机制可用于执行容器配置和发现,这些机制不涉及向主机授予容器根访问权限,这正是您在向docker套接字授予某种访问权限时所做的。
/var/run/docker.sock
wqnecbli3#
默认情况下,docker守护进程在unix:///var/run/docker.sock上侦听,以仅允许根用户进行本地连接。所以,一般来说,如果我们可以从其他地方访问这个套接字,我们就可以与docker守护进程对话,或者提取关于其他容器的信息。如果我们希望容器中的一些进程访问docker守护进程(在我们的主机上运行)管理的其他容器的信息,我们可以像上面那样声明卷。让我们看一个来自wurstmeister docker的例子。docker文件:在文件末尾,它将调用:
CMD ["start-kafka.sh"]
开始-kafka.sh让我们从第6行看一下:
if [[ -z "$KAFKA_ADVERTISED_PORT" ]]; then export KAFKA_ADVERTISED_PORT=$(docker port `hostname` $KAFKA_PORT | sed -r "s/.*:(.*)/\1/g") fi
当启动kafka容器时,他希望在kafka容器内执行以下命令(以查找到容器的端口Map…):
docker port `hostname` $KAFKA_PORT
注意,他确实装载了上面的卷,以便能够像这样执行命令。docker网站的参考(搜索socket关键字)
ars1skjm4#
以上unix套接字的用途是什么?安装 /var/run/docker.sock 容器中的套接字提供对docker守护程序托管的docker远程api的访问。任何访问此套接字的人都可以完全控制docker和运行docker的主机(基本上是根访问)。docker映像应该何时声明上述卷?很少。如果您正在运行一个docker管理工具,该工具需要在容器内具有api访问权限,那么需要将其装载(或通过tcp访问),以便该工具可以管理托管docker守护程序。正如larsks提到的,docker kafka使用socket进行配置发现是非常值得怀疑的。
4条答案
按热度按时间jdzmm42g1#
不需要挂载docker.sock文件,可以通过在kafka docker/dockerfile&start-kafka.sh中注解掉适当的行来避免。无需向kafka容器添加broker-list.sh。
olmpazwi2#
Kafka码头工程正在利用
docker
命令运行在kafka
容器,以便反省docker环境。例如,它将确定播发的kafka端口,如下所示:有一个
broker-list.sh
寻找Kafka经纪人的脚本如下:为了运行
docker
在容器中,它需要访问/var/run/docker.sock
主机上的插座。好吧,事实就是这样。以下只是我个人的看法:
坦率地说,我认为这是一个糟糕的想法,应该能够访问docker套接字的容器只有那些显式管理容器的容器。还有其他机制可用于执行容器配置和发现,这些机制不涉及向主机授予容器根访问权限,这正是您在向docker套接字授予某种访问权限时所做的。
wqnecbli3#
默认情况下,docker守护进程在unix:///var/run/docker.sock上侦听,以仅允许根用户进行本地连接。所以,一般来说,如果我们可以从其他地方访问这个套接字,我们就可以与docker守护进程对话,或者提取关于其他容器的信息。
如果我们希望容器中的一些进程访问docker守护进程(在我们的主机上运行)管理的其他容器的信息,我们可以像上面那样声明卷。让我们看一个来自wurstmeister docker的例子。
docker文件:
在文件末尾,它将调用:
开始-kafka.sh
让我们从第6行看一下:
当启动kafka容器时,他希望在kafka容器内执行以下命令(以查找到容器的端口Map…):
注意,他确实装载了上面的卷,以便能够像这样执行命令。
docker网站的参考(搜索socket关键字)
ars1skjm4#
以上unix套接字的用途是什么?
安装
/var/run/docker.sock
容器中的套接字提供对docker守护程序托管的docker远程api的访问。任何访问此套接字的人都可以完全控制docker和运行docker的主机(基本上是根访问)。docker映像应该何时声明上述卷?
很少。如果您正在运行一个docker管理工具,该工具需要在容器内具有api访问权限,那么需要将其装载(或通过tcp访问),以便该工具可以管理托管docker守护程序。
正如larsks提到的,docker kafka使用socket进行配置发现是非常值得怀疑的。