docker - Docker & Hive - Windows 上的端口 50070 端口权限被拒绝
问题描述
我想设置一个本地配置单元服务器并找到这个 repo:
https://github.com/big-data-europe/docker-hive
这是我使用的 yaml 文件。
version: "3"
services:
namenode:
image: bde2020/hadoop-namenode:2.0.0-hadoop2.7.4-java8
volumes:
- namenode:/hadoop/dfs/name
environment:
- CLUSTER_NAME=test
env_file:
- ./hadoop-hive.env
ports:
- "50070:50070"
datanode:
image: bde2020/hadoop-datanode:2.0.0-hadoop2.7.4-java8
volumes:
- datanode:/hadoop/dfs/data
env_file:
- ./hadoop-hive.env
environment:
SERVICE_PRECONDITION: "namenode:50070"
ports:
- "50075:50075"
hive-server:
image: bde2020/hive:2.3.2-postgresql-metastore
env_file:
- ./hadoop-hive.env
environment:
HIVE_CORE_CONF_javax_jdo_option_ConnectionURL: "jdbc:postgresql://hive-metastore/metastore"
SERVICE_PRECONDITION: "hive-metastore:9083"
ports:
- "10000:10000"
hive-metastore:
image: bde2020/hive:2.3.2-postgresql-metastore
env_file:
- ./hadoop-hive.env
command: /opt/hive/bin/hive --service metastore
environment:
SERVICE_PRECONDITION: "namenode:50070 datanode:50075 hive-metastore-postgresql:5432"
ports:
- "9083:9083"
hive-metastore-postgresql:
image: bde2020/hive-metastore-postgresql:2.3.0
presto-coordinator:
image: shawnzhu/prestodb:0.181
ports:
- "8080:8080"
volumes:
namenode:
datanode:
错误:
Error starting userland proxy: Bind for 0.0.0.0:50075: unexpected error Permission denied
> 50000 的端口在 Windows 上被阻止,我在公司 PC 上没有管理员权限,所以我尝试像这样映射端口:
ports:
- "40070:50070"
environment:
SERVICE_PRECONDITION: "namenode:40070 datanode:40075 hive-metastore-postgresql:5432"
这将使我启动容器,但容器似乎无法通信。
hive-metastore_1 | [1/100] check for namenode:40070...
hive-metastore_1 | [1/100] namenode:40070 is not available yet
hive-metastore_1 | [1/100] try in 5s once again ...
956a5237dbe2_docker-hive_datanode_1 | [4/100] check for namenode:40070...
956a5237dbe2_docker-hive_datanode_1 | [4/100] namenode:40070 is not available yet
我试图改变两个端口:
ports:
- "40070:40070"
这不起作用,因为某些 IP 似乎是硬编码的:
ded7410db1b9_docker-hive_namenode_1 | 21/10/08 12:39:05 INFO hdfs.DFSUtil: Starting Web-server for hdfs at: http://0.0.0.0:50070
ded7410db1b9_docker-hive_namenode_1 | 21/10/08 12:39:05 INFO http.HttpServer2: Jetty bound to port 50070
有谁知道如何让它运行?
解决方案
具有以下内容:
ports:
- "40070:50070"
您所做的只是将流量从主机端口 40070 引导到容器端口 50070。
因此,要从主机访问“namenode”,例如:
localhost:40070
并访问 compose 网络中的“namenode”:
namenode:50070
使用 BDE 的服务前置条件会反复检查容器和端口,以查看服务是否正在运行,然后再设置自己的服务以确保首先准备好。您尚未更改容器上运行的端口,因此您的容器仍应通过 port 进行通信50070
。
您错误地更改了先决条件,改为扫描主机端口40070
,而不管主机端口如何,它都应该查找内部网络容器50070
端口。
将其更改为以下内容:
ports:
- "40070:50070"
environment:
SERVICE_PRECONDITION: "namenode:50070 datanode:50075 hive-metastore-postgresql:5432"
您可以使用提供的环境变量文件更改 Hive 等上的操作端口,但您不需要这样做。将主机端口 40070 暴露给容器端口 50070 对 docker 服务的运行没有影响。
推荐阅读
- php - php 仅将 request_method 显示为 get
- reactjs - React - 道具的 TypeScript 解构
- postgresql - postgresql替换函数在函数中为其分配变量时给出错误
- c++ - 为什么我需要在链接时调用 dlopen/dlclose/dlerror 的库之前列出 -ldl
- html - 如何在 Linkedin 上以 og:image 的形式分享 GIF?
- javascript - 从消息中删除一个反应(Discord.js)
- reactjs - 用酶和玩笑测试反应给出错误找不到模块'@babel/polyfill/lib/noConflict' from 'index.js'
- javascript - 将逗号分隔的数字字符串解析为相应的对象属性
- python - 如何将 TensorRT SavedModel 加载到 TensorFlow Estimator?
- c# - 如何在 C# 中将 Web 服务存储调用到列表中