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 是一個用于定義和運行多個 Docker 容器的工具,通過使用簡單的 YAML 文件來配置應(yīng)用程序的服務(wù)、網(wǎng)絡(luò)和卷等。
使用 Docker Compose 可以方便地定義和管理容器化應(yīng)用程序的服務(wù)棧。在配置文件中,你可以指定各個服務(wù)所需的鏡像、環(huán)境變量、端口映射、數(shù)據(jù)卷掛載等信息。通過一次性執(zhí)行 docker-compose up 命令,Docker Compose 將會自動下載所需的鏡像,并啟動所有服務(wù)。此外,還可以使用 docker-compose down 命令停止服務(wù)并清理容器。
使用 Docker Compose 的好處是,它使得部署和管理多個容器變得簡單而高效。你可以將整個應(yīng)用程序的服務(wù)定義放在一個文件中,便于版本控制和共享。同時,通過 Docker Compose,你可以輕松部署一致性的開發(fā)、測試和生產(chǎn)環(huán)境,減少因環(huán)境差異而造成的問題。
docker compose 各項參數(shù)
- version: 指定 Docker Compose 文件的版本。例如,version: '3' 表示使用 Docker Compose 文件格式的版本 3。
- services: 定義各個服務(wù)。在這個部分中,你可以為每個服務(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)部的端口映射到主機的指定端口上。例如,ports: - 8080:80 表示將容器的 80 端口映射到主機的 8080 端口上。
- volumes: 配置數(shù)據(jù)卷掛載。使用 volumes 參數(shù)可以將容器內(nèi)的路徑與主機上的目錄或卷進行映射。例如,volumes: - ./data:/app/data 表示將主機上的 ./data 目錄掛載到容器的 /app/data 路徑上。
- networks: 配置網(wǎng)絡(luò)。通過 networks 參數(shù),你可以為服務(wù)指定要連接到的網(wǎng)絡(luò)。這個參數(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ù)和配置選項的詳細介紹。
代碼演示
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ù):這是一個前端服務(wù),使用了一個 Dockerfile 來構(gòu)建鏡像。它將容器內(nèi)部的 9540 端口映射到主機的 9540 端口上,并將容器內(nèi)的 /usr/share/nginx/html/static 路徑掛載到名為 upload 的數(shù)據(jù)卷上。此服務(wù)依賴于名為 servers 的服務(wù)。
- servers 服務(wù):這是一個后端服務(wù),同樣使用了一個 Dockerfile 來構(gòu)建鏡像。它通過運行 npm run start:docker 命令來啟動服務(wù)。該服務(wù)將容器內(nèi)部的 8080 端口映射到主機的 8080 端口上,并將容器內(nèi)的 /upload 路徑掛載到名為 upload 的數(shù)據(jù)卷上。此服務(wù)依賴于名為 mysql 和 redis 的服務(wù)。
- mysql 服務(wù):這是一個 MySQL 數(shù)據(jù)庫服務(wù),使用了官方的 MySQL 鏡像。該服務(wù)將容器內(nèi)部的 3306 端口映射到主機的 20003 端口上,并設(shè)置了一些環(huán)境變量來配置 MySQL 實例。此服務(wù)還將容器內(nèi)的 /var/lib/mysql 路徑掛載到名為 mysql 的數(shù)據(jù)卷上,并將主機上的 ./db/kapok.sql 文件掛載到容器內(nèi)的 /docker-entrypoint-initdb.d/kapok.sql 路徑上。
- redis 服務(wù):這是一個 Redis 緩存服務(wù),使用了官方的 Redis 鏡像。該服務(wù)將容器內(nèi)部的 6379 端口映射到主機的 20004 端口上,并將容器內(nèi)的 /data 路徑掛載到名為 redis 的數(shù)據(jù)卷上。
最后,還定義了三個數(shù)據(jù)卷 mysql、redis 和 upload,用于持久化存儲數(shù)據(jù)庫數(shù)據(jù)、Redis 數(shù)據(jù)和前端上傳的文件。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何將本地構(gòu)建好的docker鏡像發(fā)布到dockerhub
這篇文章主要介紹了如何將本地構(gòu)建好的docker鏡像發(fā)布到dockerhub,文中通過圖文教程介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05docker上快速搭建gitlab、gitlab-runer及實現(xiàn)CI/CD功能
這篇文章主要介紹了docker上快速搭建gitlab、gitlab-runer及實現(xiàn)CI/CD,本文給大家講解的非常詳細,包括docker上安裝gitlab的相關(guān)操作及配置root賬號密碼,需要的朋友可以參考下2022-04-04Docker容器搭建android編譯環(huán)境的實踐記錄
這篇文章主要介紹了Docker容器搭建android編譯環(huán)境的實踐記錄,主要包括部署容器、鏡像管理、容器管理等相關(guān)知識,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07docker安裝nginx實現(xiàn)對springboot項目的負載均衡的操作方法
這篇文章主要介紹了docker安裝nginx實現(xiàn)對springboot項目的負載均衡的操作方法,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-06-06Docker搭建PHP運行環(huán)境完整步驟(圖文教程)
PHP是一種廣泛使用的編程語言,被用于Web開發(fā)和服務(wù)器管理等各種用途,而Docker則是一種非常流行的容器化平臺,可以方便地管理應(yīng)用程序和環(huán)境,這篇文章主要給大家介紹了關(guān)于Docker搭建PHP運行環(huán)境的完整步驟,需要的朋友可以參考下2023-09-09