docker-compose java.net.UnknownHostException問題
docker-compose java.net.UnknownHostException

historyserver | Caused by: java.lang.RuntimeException: Could not resolve Kerberos principal name: java.net.UnknownHostException: historyserver: historyserver: Name or service not known
historyserver | at org.apache.hadoop.security.AuthenticationFilterInitializer.getFilterConfigMap(AuthenticationFilterInitializer.java:90)
historyserver | at org.apache.hadoop.http.HttpServer2.getFilterProperties(HttpServer2.java:454)
historyserver | at org.apache.hadoop.http.HttpServer2.constructSecretProvider(HttpServer2.java:445)
historyserver | at org.apache.hadoop.http.HttpServer2.<init>(HttpServer2.java:339)
historyserver | ... 8 more
historyserver | Caused by: java.net.UnknownHostException: historyserver: historyserver: Name or service not known
historyserver | at java.net.InetAddress.getLocalHost(InetAddress.java:1496)
historyserver | at org.apache.hadoop.security.SecurityUtil.getLocalHostName(SecurityUtil.java:190)
historyserver | at
...
注釋 network_mode: ‘host’
[root@localhost module]# cat docker-compose-hadoop-cluster.yaml
version: "2.2"
services:
namenode:
image: bde2020/hadoop-namenode:1.1.0-hadoop2.7.1-java8
hostname: namenode
container_name: namenode
ports:
- 9000:9000
- 50070:50070
restart: always
#network_mode: 'host'
environment:
- CLUSTER_NAME=test
- HDFS_CONF_dfs_permissions=false
env_file:
- ./hadoop.env
resourcemanager:
image: bde2020/hadoop-resourcemanager:1.1.0-hadoop2.7.1-java8
hostname: resourcemanager
container_name: resourcemanager
ports:
- 8030:8030
- 8031:8031
- 8032:8032
- 8033:8033
- 8088:8088
restart: always
#network_mode: 'host'
depends_on:
- namenode
- datanode1
- datanode2
- datanode3
env_file:
- ./hadoop.env
historyserver:
image: bde2020/hadoop-historyserver:1.1.0-hadoop2.7.1-java8
hostname: historyserver
container_name: historyserver
ports:
- 8188:8188
restart: always
#network_mode: 'host'
depends_on:
- namenode
- datanode1
- datanode2
- datanode3
#volumes:
# - ./hadoop/historyserver:/hadoop/yarn/timeline
env_file:
- ./hadoop.env
nodemanager1:
image: bde2020/hadoop-nodemanager:1.1.0-hadoop2.7.1-java8
hostname: nodemanager1
container_name: nodemanager1
ports:
- 8040:8040
- 8041:8041
- 8042:8042
restart: always
#network_mode: 'host'
depends_on:
- namenode
- datanode1
- datanode2
- datanode3
env_file:
- ./hadoop.env
datanode1:
image: bde2020/hadoop-datanode:1.1.0-hadoop2.7.1-java8
hostname: datanode1
container_name: datanode1
restart: always
#network_mode: 'host'
environment:
- HDFS_CONF_dfs_datanode_address=0.0.0.0:50010
- HDFS_CONF_dfs_datanode_ipc_address=0.0.0.0:50020
- HDFS_CONF_dfs_datanode_http_address=0.0.0.0:50075
ports:
- 50010:50010
- 50020:50020
- 50075:50075
depends_on:
- namenode
#volumes:
# - ./hadoop/datanode1:/hadoop/dfs/data
env_file:
- ./hadoop.env
datanode2:
image: bde2020/hadoop-datanode:1.1.0-hadoop2.7.1-java8
hostname: datanode2
container_name: datanode2
restart: always
#network_mode: 'host'
environment:
- HDFS_CONF_dfs_datanode_address=0.0.0.0:50012
- HDFS_CONF_dfs_datanode_ipc_address=0.0.0.0:50022
- HDFS_CONF_dfs_datanode_http_address=0.0.0.0:50072
ports:
- 50012:50012
- 50022:50022
- 50072:50072
depends_on:
- namenode
#volumes:
# - ./hadoop/datanode2:/hadoop/dfs/data
env_file:
- ./hadoop.env
datanode3:
image: bde2020/hadoop-datanode:1.1.0-hadoop2.7.1-java8
hostname: datanode3
container_name: datanode3
restart: always
#network_mode: 'host'
environment:
- HDFS_CONF_dfs_datanode_address=0.0.0.0:50013
- HDFS_CONF_dfs_datanode_ipc_address=0.0.0.0:50023
- HDFS_CONF_dfs_datanode_http_address=0.0.0.0:50073
ports:
- 50013:50013
- 50023:50023
- 50073:50073
depends_on:
- namenode
#volumes:
# - ./hadoop/datanode3:/hadoop/dfs/data
env_file:
- ./hadoop.env
docker compose各參數(shù)配置介紹
Docker Compose 是一個(gè)用于定義和運(yùn)行多個(gè) Docker 容器的工具,通過使用簡單的 YAML 文件來配置應(yīng)用程序的服務(wù)、網(wǎng)絡(luò)和卷等。
使用 Docker Compose 可以方便地定義和管理容器化應(yīng)用程序的服務(wù)棧。在配置文件中,你可以指定各個(gè)服務(wù)所需的鏡像、環(huán)境變量、端口映射、數(shù)據(jù)卷掛載等信息。通過一次性執(zhí)行 docker-compose up 命令,Docker Compose 將會自動下載所需的鏡像,并啟動所有服務(wù)。此外,還可以使用 docker-compose down 命令停止服務(wù)并清理容器。
使用 Docker Compose 的好處是,它使得部署和管理多個(gè)容器變得簡單而高效。你可以將整個(gè)應(yīng)用程序的服務(wù)定義放在一個(gè)文件中,便于版本控制和共享。同時(shí),通過 Docker Compose,你可以輕松部署一致性的開發(fā)、測試和生產(chǎn)環(huán)境,減少因環(huán)境差異而造成的問題。
docker compose 各項(xiàng)參數(shù)
- version: 指定 Docker Compose 文件的版本。例如,version: '3' 表示使用 Docker Compose 文件格式的版本 3。
- services: 定義各個(gè)服務(wù)。在這個(gè)部分中,你可以為每個(gè)服務(wù)指定名稱、鏡像、環(huán)境變量、端口映射等信息。
- image: 指定服務(wù)所使用的鏡像。例如,image: nginx:latest 表示使用最新版本的 Nginx 鏡像。
- environment: 設(shè)置環(huán)境變量。你可以通過 environment 參數(shù)為服務(wù)指定所需的環(huán)境變量及其值。例如,environment: - MYSQL_ROOT_PASSWORD=example 表示設(shè)置 MySQL 服務(wù)的 MYSQL_ROOT_PASSWORD 環(huán)境變量為 "example"。
- ports: 指定端口映射。通過 ports 參數(shù),你可以將容器內(nèi)部的端口映射到主機(jī)的指定端口上。例如,ports: - 8080:80 表示將容器的 80 端口映射到主機(jī)的 8080 端口上。
- volumes: 配置數(shù)據(jù)卷掛載。使用 volumes 參數(shù)可以將容器內(nèi)的路徑與主機(jī)上的目錄或卷進(jìn)行映射。例如,volumes: - ./data:/app/data 表示將主機(jī)上的 ./data 目錄掛載到容器的 /app/data 路徑上。
- networks: 配置網(wǎng)絡(luò)。通過 networks 參數(shù),你可以為服務(wù)指定要連接到的網(wǎng)絡(luò)。這個(gè)參數(shù)可用于定義自定義網(wǎng)絡(luò)以及連接到現(xiàn)有網(wǎng)絡(luò)。
- depends_on: 設(shè)置服務(wù)依賴。使用 depends_on 參數(shù)可以指定服務(wù)之間的依賴關(guān)系。例如,depends_on: - db 表示該服務(wù)依賴于名為 db 的服務(wù)。
這些只是 Docker Compose 配置文件中一些常用的參數(shù)。建議查閱 Docker Compose 官方文檔,了解更多參數(shù)和配置選項(xiàng)的詳細(xì)介紹。
代碼演示
services:
client:
build:
context: ./client
dockerfile: ./Dockerfile
restart: always
ports:
- 9540:9540
volumes:
- upload:/usr/share/nginx/html/static
depends_on:
- servers
servers:
build:
context: ./servers
dockerfile: ./Dockerfile
command: npm run start:docker
restart: always
ports:
- 8080:8080
volumes:
- upload:/upload
depends_on:
- mysql
- redis
mysql:
image: mysql
command: mysqld --character-set-server=utf8mb4 --collation-
server=utf8mb4_unicode_ci
restart: always
ports:
- 20003:3306
environment:
MYSQL_ROOT_PASSWORD: 'root'
MYSQL_DATABASE: 'BASE_DB'
volumes:
- mysql:/var/lib/mysql
- ./db/kapok.sql:/docker-entrypoint-initdb.d/kapok.sql
adminer:
image: adminer
restart: always
ports:
8088:8080
redis:
image: redis
restart: always
ports:
- 20004:6379
volumes:
- redis:/data- client 服務(wù):這是一個(gè)前端服務(wù),使用了一個(gè) Dockerfile 來構(gòu)建鏡像。它將容器內(nèi)部的 9540 端口映射到主機(jī)的 9540 端口上,并將容器內(nèi)的 /usr/share/nginx/html/static 路徑掛載到名為 upload 的數(shù)據(jù)卷上。此服務(wù)依賴于名為 servers 的服務(wù)。
- servers 服務(wù):這是一個(gè)后端服務(wù),同樣使用了一個(gè) Dockerfile 來構(gòu)建鏡像。它通過運(yùn)行 npm run start:docker 命令來啟動服務(wù)。該服務(wù)將容器內(nèi)部的 8080 端口映射到主機(jī)的 8080 端口上,并將容器內(nèi)的 /upload 路徑掛載到名為 upload 的數(shù)據(jù)卷上。此服務(wù)依賴于名為 mysql 和 redis 的服務(wù)。
- mysql 服務(wù):這是一個(gè) MySQL 數(shù)據(jù)庫服務(wù),使用了官方的 MySQL 鏡像。該服務(wù)將容器內(nèi)部的 3306 端口映射到主機(jī)的 20003 端口上,并設(shè)置了一些環(huán)境變量來配置 MySQL 實(shí)例。此服務(wù)還將容器內(nèi)的 /var/lib/mysql 路徑掛載到名為 mysql 的數(shù)據(jù)卷上,并將主機(jī)上的 ./db/kapok.sql 文件掛載到容器內(nèi)的 /docker-entrypoint-initdb.d/kapok.sql 路徑上。
- redis 服務(wù):這是一個(gè) Redis 緩存服務(wù),使用了官方的 Redis 鏡像。該服務(wù)將容器內(nèi)部的 6379 端口映射到主機(jī)的 20004 端口上,并將容器內(nèi)的 /data 路徑掛載到名為 redis 的數(shù)據(jù)卷上。
最后,還定義了三個(gè)數(shù)據(jù)卷 mysql、redis 和 upload,用于持久化存儲數(shù)據(jù)庫數(shù)據(jù)、Redis 數(shù)據(jù)和前端上傳的文件。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker可視化面板Portainer的實(shí)現(xiàn)
Portainer是一個(gè)免費(fèi)的容器管理工具,支持Docker環(huán)境的可視化管理,通過Portainer,用戶可以輕松地在Windows或Linux容器中部署服務(wù),大大簡化了Docker容器的管理工作,感興趣的可以了解一下2024-11-11
退出docker run的幾種實(shí)現(xiàn)方式
文章總結(jié):本文介紹了幾種退出Docker容器的方法,包括在容器內(nèi)使用`exit`命令、在命令行界面中使用`Ctrl+D`組合鍵、使用`Ctrl+C`中斷進(jìn)程、通過`docker stop`命令停止容器以及使用`docker kill`命令強(qiáng)制停止容器2026-01-01
通過提前bake Docker鏡像加快基礎(chǔ)設(shè)施的啟動速度
這篇文章主要介紹了通過提前bake Docker鏡像加快基礎(chǔ)設(shè)施的啟動速度的相關(guān)資料,需要的朋友可以參考下2017-01-01

