kubernetes添加不了google apt-key

本文提供了一种在服务器上安装Kubernetes的方法,包括下载并安装必要的软件包,如kubelet、kubeadm和kubectl,以及配置apt源和密钥。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自icepoint的博客
key来源
我的百度云盘 密码:v3wo

下载kube_apt_key.gpg到本地,上传到服务器后执行下面的命令

apt-get update && apt-get install -y apt-transport-https
下载apt_key
cat kube_apt_key.gpg | sudo apt-key add -
echo "deb [arch=amd64] https://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list
apt-get update
apt-get install -y kubelet kubeadm kubectl        //如果报错去掉-y试试
<think>我们正在使用Docker部署n8n,并且需要自定义Docker镜像以支持执行命令(如安装Chrome、Chromedriver、Python等依赖)。目标是在n8n的Execute Command节点中能够运行这些依赖环境下的命令(例如Python脚本)。 步骤概述: 1. 创建自定义Dockerfile,基于官方n8n镜像,安装所需依赖(Chrome, Chromedriver, Python3, pip及所需Python包等)。 2. 构建自定义镜像。 3. 使用自定义镜像运行n8n容器。 4. 在n8n工作流中使用Execute Command节点执行命令(例如运行Python脚本)。 详细步骤: ### 1. 创建Dockerfile 在项目目录下创建`Dockerfile`,内容如下: ```dockerfile # 使用官方n8n镜像作为基础 FROM n8nio/n8n:latest # 切换到root用户安装系统包 USER root # 安装所需系统依赖(包括Chrome、Chromedriver、Python3等) # 这里以Debian为基础,安装最新稳定版Chrome和Chromedriver RUN apt-get update && \ apt-get install -y wget gnupg2 unzip python3-pip && \ wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \ echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list && \ apt-get update && \ apt-get install -y google-chrome-stable && \ CHROME_VERSION=$(google-chrome --version | awk '{print $3}' | cut -d '.' -f 1) && \ CHROMEDRIVER_VERSION=$(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_VERSION}) && \ wget -O /tmp/chromedriver.zip https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip && \ unzip /tmp/chromedriver.zip -d /usr/local/bin/ && \ chmod +x /usr/local/bin/chromedriver && \ rm /tmp/chromedriver.zip # 安装Python依赖(例如pycryptodome, selenium等) RUN pip3 install pycryptodome selenium # 切换回n8n用户(非root) USER node # 设置环境变量(可选) ENV NODE_ENV=production ``` ### 2. 构建自定义镜像 在Dockerfile所在目录执行: ```bash docker build -t custom-n8n:latest . ``` ### 3. 运行自定义镜像的容器 使用以下命令运行容器(注意:我们将n8n的数据卷挂载出来,以便持久化数据): ```bash docker volume create n8n_data docker run -it --rm --name custom-n8n -p 5678:5678 -v n8n_data:/home/node/.n8n custom-n8n:latest ``` 如果需要在后台运行,可以将`-it --rm`替换为`-d`。 注意:如果需要访问宿主机的Docker(例如在n8n中运行Docker命令),可以挂载Docker套接字(但请注意安全风险): ```bash -v /var/run/docker.sock:/var/run/docker.sock ``` ### 4. 在n8n工作流中使用Execute Command节点 现在,我们可以在n8n工作流中使用Execute Command节点来执行命令了。例如,执行一个Python脚本: 1. **准备Python脚本**:将你的脚本(例如`cookies_extractor.py`)放在n8n容器内。可以通过以下方式: - 在构建镜像时复制到镜像中(在Dockerfile中添加`COPY cookies_extractor.py /home/node/`,注意切换用户前复制并设置权限) - 或者通过挂载卷的方式:在运行容器时添加`-v /path/to/scripts:/scripts`,然后在容器内通过`/scripts/cookies_extractor.py`访问。 2. **配置Execute Command节点**: - Command: `python3` - Arguments: `/scripts/cookies_extractor.py` (如果挂载了卷到/scripts) 节点配置示例(JSON模式): ```json { "parameters": { "command": "python3", "arguments": [ "/scripts/cookies_extractor.py" ], "workingDirectory": "/scripts" } } ``` 3. **处理输出**:该节点的输出将包含脚本的标准输出,可以在后续节点中使用。 ### 注意事项: - **权限问题**:在Dockerfile中,我们以root身份安装软件,然后切换回n8n用户(node)。确保node用户有执行命令的权限(例如chromedriver位于/usr/local/bin,该目录通常对所有用户可执行)。 - **容器内路径**:确保在Execute Command节点中使用的路径是容器内的绝对路径,并且n8n用户(node)有访问权限。 - **环境变量**:如果需要,可以在Dockerfile中设置环境变量,或者在运行容器时通过`-e`设置。 - **持久化数据**:使用`docker volume`来持久化n8n的数据(如工作流、凭证等)。 - **安全**:在容器内以非root用户运行n8n,避免安全风险。 ### 验证 可以在n8n中创建一个简单的工作流,使用Execute Command节点执行`google-chrome --version`和`chromedriver --version`来验证安装是否成功。 ### 相关问题 1. 如何在Dockerfile中安装特定版本的Chrome和Chromedriver? 2. 如何在n8n容器中运行需要图形界面的应用(例如Selenium非headless模式)? 3. 如何将宿主机的目录挂载到n8n容器中以供脚本使用? 4. 如何避免在Dockerfile中以root用户安装软件带来的安全问题? 5. 如何更新自定义镜像中的依赖? 以上步骤应该能够帮助你在n8n中通过自定义Docker镜像执行命令。</think>### 在 n8n 中部署自定义 Docker 镜像并执行命令的完整步骤 #### 步骤 1:创建自定义 Dockerfile 创建包含 Chrome、Python 等依赖的 Dockerfile: ```dockerfile # 基于官方 n8n 镜像 FROM n8nio/n8n:latest # 切换到 root 用户安装依赖 USER root # 安装 Chrome 和 Chromedriver RUN apt-get update && apt-get install -y \ wget \ gnupg \ unzip \ python3-pip \ libgconf-2-4 \ libxss1 \ libappindicator1 \ libindicator7 # 安装 Chrome RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \ && echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list \ && apt-get update \ && apt-get install -y google-chrome-stable # 安装 Chromedriver(自动匹配 Chrome 版本) RUN CHROME_VERSION=$(google-chrome --version | awk '{print $3}' | cut -d '.' -f 1) \ && CHROMEDRIVER_VERSION=$(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROME_VERSION) \ && wget -O /tmp/chromedriver.zip https://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip \ && unzip /tmp/chromedriver.zip -d /usr/local/bin/ \ && chmod +x /usr/local/bin/chromedriver \ && rm /tmp/chromedriver.zip # 安装 Python 依赖 RUN pip3 install pycryptodome selenium # 切换回 n8n 用户 USER node # 设置环境变量 ENV DISPLAY=:99 ``` #### 步骤 2:构建自定义镜像 在 Dockerfile 所在目录执行: ```bash docker build -t custom-n8n:latest . ``` #### 步骤 3:运行自定义容器 ```bash docker run -d --name n8n-custom \ -p 5678:5678 \ -v n8n_data:/home/node/.n8n \ -v /path/to/scripts:/scripts \ # 挂载脚本目录 custom-n8n:latest ``` #### 步骤 4:配置 Execute Command 节点 在 n8n 工作流中配置节点: ```json { "command": "python3", "arguments": [ "/scripts/cookies_extractor.py" ], "workingDirectory": "/scripts", "environmentVariables": [ { "name": "DISPLAY", "value": ":99" } ] } ``` #### 步骤 5:验证功能 创建测试工作流: 1. **Execute Command 节点**:执行 `google-chrome --version` 2. **Set 节点**:存储输出结果 3. **HTTP Request 节点**:使用获取的 Cookies 访问目标网站 #### 容器内调试技巧 ```bash # 进入运行中的容器 docker exec -it n8n-custom /bin/bash # 测试命令 python3 --version chromedriver --version google-chrome --headless --disable-gpu --dump-dom https://example.com ``` ### 关键配置说明 1. **用户权限**: - 安装依赖时切换到 `root` 用户 - 运行阶段切换回 `node` 用户(n8n 默认用户) ```dockerfile USER root # 安装命令... USER node ``` 2. **版本匹配**: - 自动匹配 Chrome 和 Chromedriver 版本 ```dockerfile CHROME_VERSION=$(google-chrome --version | awk '{print $3}' | cut -d '.' -f 1) CHROMEDRIVER_VERSION=$(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROME_VERSION) ``` 3. **无头模式支持**: ```dockerfile ENV DISPLAY=:99 ``` ### 常见问题解决 1. **权限错误**: ```bash # Dockerfile 中添加 RUN chown -R node:node /home/node ``` 2. **依赖缺失**: ```dockerfile # 补充依赖 RUN apt-get install -y libgbm-dev libnss3 libatk1.0-0 ``` 3. **Selenium 连接失败**: ```python # Python 脚本中添加 options = webdriver.ChromeOptions() options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') ``` ### 最佳实践 1. **镜像优化**: ```dockerfile # 清理缓存减少镜像大小 RUN apt-get clean && rm -rf /var/lib/apt/lists/* ``` 2. **凭证安全**: ```bash # 运行时注入敏感数据 docker run -e "SECRET_KEY=12345" custom-n8n:latest ``` 3. **健康检查**: ```dockerfile HEALTHCHECK --interval=30s CMD curl -f http://localhost:5678/healthz || exit 1 ``` ### 相关问题 1. 如何为不同的 n8n 工作流创建专用容器? 2. 如何监控自定义容器中命令执行的资源消耗? 3. 当需要更新 Chrome 版本时如何自动重建镜像? 4. 如何在 Kubernetes 中部署这个自定义 n8n 镜像? 5. 如何优化 Dockerfile 构建速度? > 提示:Windows 用户使用 Docker Desktop 时,需在 `Settings > Resources > File Sharing` 中添加脚本目录的访问权限[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值