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)的路徑與主機上的目錄或卷進(jìn)行映射。例如,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ù)和配置選項的詳細(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ù):這是一個前端服務(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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- 基于spring-boot和docker-java實現(xiàn)對docker容器的動態(tài)管理和監(jiān)控功能[附完整源碼下載]
- 使用Kubernetes和Docker部署Java微服務(wù)詳細(xì)代碼
- Docker中Java基礎(chǔ)鏡像OpenJDK和OracleJDK使用方法
- Docker啟動容器報錯:Ports are not available的解決方案
- Docker使用java項目工程的部署
- Docker部署Java應(yīng)用程序的實現(xiàn)步驟
- Java(SpringBoot)項目打包(構(gòu)建)成Docker鏡像的幾種常見方式
- 對Docker-java項目進(jìn)行jvm調(diào)優(yōu)-內(nèi)存方式
相關(guān)文章
Docker部署nginx+php環(huán)境的全過程(簡單可用!)
最近在學(xué)docker,順便配置了一下docker中的nginx與php,發(fā)現(xiàn)網(wǎng)上的關(guān)于docker中配置nginx與php的資料很少,而且有的也很舊,沒有太多的參考性,下面這篇文章主要給大家介紹了關(guān)于Docker部署nginx+php環(huán)境的相關(guān)資料,需要的朋友可以參考下2023-02-02基于docker?部署canvas-lms的詳細(xì)步驟
這篇文章主要介紹了基于docker?部署?canvas-lms,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03使用?Docker?Compose?構(gòu)建復(fù)雜的多容器?App的方法
Docker Compose 工具相當(dāng)于 C/C++ 的 make 工具,使用 make 需要 Makefile,所有的編譯鏈接設(shè)置都在Makefile 中指定,不需要為了運行程序而每次都在終端手動輸入長串的指令,這篇文章主要介紹了使用?Docker?Compose?構(gòu)建復(fù)雜的多容器?App,需要的朋友可以參考下2022-04-04Docker可視化ui管理工具Portainer安裝及使用解析
這篇文章主要介紹了Docker可視化ui管理工具Portainer安裝及使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11Docker容器使用jenkins部署web項目(總結(jié))
這篇文章主要介紹了Docker容器使用jenkins部署web項目(總結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08Docker實現(xiàn)Mariadb分庫分表及讀寫分離功能
這篇文章主要給大家介紹了關(guān)于Docker實現(xiàn)Mariadb分庫分表及讀寫分離功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05一文詳解如何在Ubuntu系統(tǒng)中安裝docker
這篇文章主要為大家詳細(xì)介紹了在Ubuntu操作系統(tǒng)上安裝Docker的步驟,以便我們可以開始使用Docker來構(gòu)建和運行容器化應(yīng)用程序,希望對大家有所幫助2024-03-03