194 lines
60 KiB
HTML
194 lines
60 KiB
HTML
<!doctype html><html lang=zh-cn dir=ltr class=scroll-smooth data-default-appearance=light data-auto-appearance=true><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=theme-color content="#ffffff"><title>使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器 · 华禹 个人博客</title><meta name=title content="使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器 · 华禹 个人博客"><script type=text/javascript src=http://blog.hys.my/js/appearance.min.8a082f81b27f3cb2ee528df0b0bdc39787034cf2cc34d4669fbc9977c929023c.js integrity="sha256-iggvgbJ/PLLuUo3wsL3Dl4cDTPLMNNRmn7yZd8kpAjw="></script><link type=text/css rel=stylesheet href=http://blog.hys.my/css/main.bundle.min.100caa677b4bc416cdd884107b203b4869f9b413a19aa57d12069fb826f1abe9.css integrity="sha256-EAyqZ3tLxBbN2IQQeyA7SGn5tBOhmqV9EgafuCbxq+k="><script defer type=text/javascript id=script-bundle src=http://blog.hys.my/js/main.bundle.min.ad7c1061b54aa5c79b6614847630c72567108bdf84dbf18d025ed692b0074cfe.js integrity="sha256-rXwQYbVKpcebZhSEdjDHJWcQi9+E2/GNAl7WkrAHTP4=" data-copy data-copied></script><meta name=description content="
|
||
|
||
在服务器上运行安卓和浏览器,以便执行一些自动化任务,比如115自动签到。使用自己的安卓手机来运行这些任务很容易中断,而在服务器上运行可以随时随地打开网页进行操作。至于为什么要运行Firefox浏览器,则是为了实现一套放在云上的指纹浏览器。注册国外的一些账号时,需要确保IP、语言、时区等保持一致,并且支持不同地区。我这套方案支持一键启动多实例,即同时运行多个安卓和Firefox。
|
||
|
||
"><link rel=canonical href=http://blog.hys.my/posts/android-firefox/><link rel=apple-touch-icon sizes=180x180 href=/apple-touch-icon.png><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=manifest href=/site.webmanifest><meta property="og:url" content="http://blog.hys.my/posts/android-firefox/"><meta property="og:site_name" content="华禹 个人博客"><meta property="og:title" content="使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器"><meta property="og:description" content="在服务器上运行安卓和浏览器,以便执行一些自动化任务,比如115自动签到。使用自己的安卓手机来运行这些任务很容易中断,而在服务器上运行可以随时随地打开网页进行操作。至于为什么要运行Firefox浏览器,则是为了实现一套放在云上的指纹浏览器。注册国外的一些账号时,需要确保IP、语言、时区等保持一致,并且支持不同地区。我这套方案支持一键启动多实例,即同时运行多个安卓和Firefox。"><meta property="og:locale" content="zh_cn"><meta property="og:type" content="article"><meta property="article:section" content="posts"><meta property="article:published_time" content="2026-04-18T10:00:00+08:00"><meta property="article:modified_time" content="2026-04-18T10:00:00+08:00"><meta property="article:tag" content="自动签到"><meta property="article:tag" content="自建云手机"><meta property="article:tag" content="指纹浏览器"><meta name=twitter:card content="summary"><meta name=twitter:title content="使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器"><meta name=twitter:description content="在服务器上运行安卓和浏览器,以便执行一些自动化任务,比如115自动签到。使用自己的安卓手机来运行这些任务很容易中断,而在服务器上运行可以随时随地打开网页进行操作。至于为什么要运行Firefox浏览器,则是为了实现一套放在云上的指纹浏览器。注册国外的一些账号时,需要确保IP、语言、时区等保持一致,并且支持不同地区。我这套方案支持一键启动多实例,即同时运行多个安卓和Firefox。"><script type=application/ld+json>{"@context":"https://schema.org","@type":"Article","articleSection":"最近笔记","name":"使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器","headline":"使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器","abstract":"在服务器上运行安卓和浏览器,以便执行一些自动化任务,比如115自动签到。使用自己的安卓手机来运行这些任务很容易中断,而在服务器上运行可以随时随地打开网页进行操作。至于为什么要运行Firefox浏览器,则是为了实现一套放在云上的指纹浏览器。注册国外的一些账号时,需要确保IP、语言、时区等保持一致,并且支持不同地区。我这套方案支持一键启动多实例,即同时运行多个安卓和Firefox。","inLanguage":"zh-cn","url":"http:\/\/blog.hys.my\/posts\/android-firefox\/","author":{"@type":"Person","name":"华禹"},"copyrightYear":"2026","dateCreated":"2026-04-18T10:00:00\u002b08:00","datePublished":"2026-04-18T10:00:00\u002b08:00","dateModified":"2026-04-18T10:00:00\u002b08:00","keywords":["自动签到","自建云手机","指纹浏览器"],"mainEntityOfPage":"true","wordCount":"1836"}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":"http://blog.hys.my/","name":"Home","position":1},{"@type":"ListItem","item":"http://blog.hys.my/posts/","name":"最近笔记","position":2},{"@type":"ListItem","item":"http://blog.hys.my/categories/docker/","name":"Docker","position":3},{"@type":"ListItem","name":"使用 Docker容器在服务器上运行安卓和 Firefox,实现自建云手机和指纹浏览器","position":4}]}</script><meta name=author content="华禹"><link href=mailto:hello@your_domain.com rel=me><link href=https://link-to-some-website.com/ rel=me><link href=https://www.amazon.com/hz/wishlist/ls/wishlist-id rel=me><link href=https://www.apple.com rel=me><link href=https://xing.com/profile/username rel=me></head><body class="m-auto flex h-screen max-w-7xl flex-col bg-neutral px-6 text-lg leading-7 text-neutral-900 dark:bg-neutral-800 dark:text-neutral sm:px-14 md:px-24 lg:px-32"><div id=the-top class="absolute flex self-center"><a class="-translate-y-8 rounded-b-lg bg-primary-200 px-3 py-1 text-sm focus:translate-y-0 dark:bg-neutral-600" href=#main-content><span class="pe-2 font-bold text-primary-600 dark:text-primary-400">↓</span></a></div><header class="py-6 font-semibold text-neutral-900 dark:text-neutral sm:py-10 print:hidden"><nav class="flex items-start justify-between sm:items-center"><div class="z-40 flex flex-row items-center"><a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2" rel=me href=/>华禹 个人博客</a></div><label id=menu-button for=menu-controller class="block sm:hidden"><input type=checkbox id=menu-controller class=hidden><div class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 448 512"><path fill="currentColor" d="M0 96C0 78.33 14.33 64 32 64H416c17.7.0 32 14.33 32 32 0 17.7-14.3 32-32 32H32C14.33 128 0 113.7.0 96zM0 256c0-17.7 14.33-32 32-32H416c17.7.0 32 14.3 32 32s-14.3 32-32 32H32c-17.67.0-32-14.3-32-32zM416 448H32c-17.67.0-32-14.3-32-32s14.33-32 32-32H416c17.7.0 32 14.3 32 32s-14.3 32-32 32z"/></svg></span></div><div id=menu-wrapper class="invisible fixed inset-0 z-30 m-auto h-full w-full cursor-default overflow-auto bg-neutral-100/50 opacity-0 backdrop-blur-sm transition-opacity dark:bg-neutral-900/50"><ul class="mx-auto flex w-full max-w-7xl list-none flex-col overflow-visible px-6 py-6 text-end sm:px-14 sm:py-10 sm:pt-10 md:px-24 lg:px-32"><li class=mb-1><span class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75.0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3 54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75.0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75.0-45.25s32.75-12.5 45.25.0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25.0s12.5 32.75.0 45.25l-105.4 105.4L310.6 361.4z"/></svg></span></span></li><li class="group mb-1"><a href=/ title=Home onclick=close_menu()><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">首页</span></a></li><li class="group mb-1"><a href=/posts/ title=最近笔记 onclick=close_menu()><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">学习笔记</span></a></li><li class="group mb-1"><a href title onclick=close_menu()><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">我的简历</span></a></li><li class="group mb-1"><button id=search-button-m0 title>
|
||
<span class="group-dark:hover:text-primary-400 transition-colors group-hover:text-primary-600"><span class="icon relative inline-block px-1 align-text-bottom"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7 405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9.0 208 0S0 93.1.0 208s93.1 208 208 208c48.3.0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9.0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7.0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7.0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg></span></span></button></li></ul></div></label><ul class="hidden list-none flex-row text-end sm:flex"><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0"><a href=/ title=Home><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">首页</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0"><a href=/posts/ title=最近笔记><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">学习笔记</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0"><a href title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">我的简历</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0"><button id=search-button-m1 title>
|
||
<span class="group-dark:hover:text-primary-400 transition-colors group-hover:text-primary-600"><span class="icon relative inline-block px-1 align-text-bottom"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7 405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9.0 208 0S0 93.1.0 208s93.1 208 208 208c48.3.0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9.0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7.0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7.0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg></span></span></button></li></ul></nav></header><div class="relative flex grow flex-col"><main id=main-content class=grow><article><header class=max-w-prose><h1 class="mb-8 mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">使用Docker容器在服务器上运行安卓和Firefox,实现自建云手机和指纹浏览器</h1><div class="mb-10 text-base text-neutral-500 dark:text-neutral-400 print:hidden"><div class="flex flex-row flex-wrap items-center"><time datetime="2026-04-18 10:00:00 +0800 +0800"></time><span class="px-2 text-primary-500">·</span><span title></span></div><div class="my-1 flex flex-wrap text-xs leading-relaxed text-neutral-500 dark:text-neutral-400"><a href=http://blog.hys.my/categories/docker/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">Docker</a>
|
||
<a href=http://blog.hys.my/categories/android/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">Android</a>
|
||
<a href=http://blog.hys.my/categories/firefox/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">Firefox</a>
|
||
<a href=http://blog.hys.my/tags/%E8%87%AA%E5%8A%A8%E7%AD%BE%E5%88%B0/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">自动签到</a>
|
||
<a href=http://blog.hys.my/tags/%E8%87%AA%E5%BB%BA%E4%BA%91%E6%89%8B%E6%9C%BA/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">自建云手机</a>
|
||
<a href=http://blog.hys.my/tags/%E6%8C%87%E7%BA%B9%E6%B5%8F%E8%A7%88%E5%99%A8/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">指纹浏览器</a></div></div></header><section class="prose mt-0 flex max-w-full flex-col dark:prose-invert lg:flex-row"><div class="min-h-0 min-w-0 max-w-prose grow"><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/IMG_2680_hu_4bd1b2f71ee1a21b.webp 330w,http://blog.hys.my/posts/android-firefox/IMG_2680_hu_e66d97a84149cadb.webp 660w
|
||
,http://blog.hys.my/posts/android-firefox/IMG_2680_hu_e4446d5a7261282c.webp 1024w
|
||
,http://blog.hys.my/posts/android-firefox/IMG_2680_hu_d85de4790089ebfb.webp 1320w" sizes=100vw type=image/webp><img width=1800 height=766 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/IMG_2680_hu_a60c991b69d39137.jpeg srcset="http://blog.hys.my/posts/android-firefox/IMG_2680_hu_148b4f7135ed17b0.jpeg 330w,http://blog.hys.my/posts/android-firefox/IMG_2680_hu_a60c991b69d39137.jpeg 660w
|
||
,http://blog.hys.my/posts/android-firefox/IMG_2680_hu_39f54089ac4b9d2.jpeg 1024w
|
||
,http://blog.hys.my/posts/android-firefox/IMG_2680_hu_e90bd0e425c51193.jpeg 1320w" sizes=100vw></picture></figure></p><p>在服务器上运行安卓和浏览器,以便执行一些自动化任务,比如115自动签到。使用自己的安卓手机来运行这些任务很容易中断,而在服务器上运行可以随时随地打开网页进行操作。至于为什么要运行Firefox浏览器,则是为了实现一套放在云上的指纹浏览器。注册国外的一些账号时,需要确保IP、语言、时区等保持一致,并且支持不同地区。我这套方案支持一键启动多实例,即同时运行多个安卓和Firefox。</p><h2 id=操作环境 class="relative group">操作环境 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e6%93%8d%e4%bd%9c%e7%8e%af%e5%a2%83 aria-label>#</a></span></h2><ul><li>甲骨文服务器</li><li><a href=https://github.com/monlor/dockerfiles/tree/main/ws-scrcpy target=_blank rel=noreferrer>ws-scrcpy</a>(web版本的scrcpy,用于实现远程控制,我适配了arm)</li><li><a href=https://github.com/monlor/dockerfiles/tree/main/firefox target=_blank rel=noreferrer>firefox</a>(docker版本的Firefox,我添加了中文字体)</li><li><a href=https://github.com/remote-android/redroid-doc target=_blank rel=noreferrer>redroid</a>(docker版本的安卓,可以自行定制镜像)</li><li><a href=https://github.com/NginxProxyManager/nginx-proxy-manager target=_blank rel=noreferrer>nginx-proxy-manager</a>(web管理nginx,可以自动申请证书,添加basic认证)</li><li>cloudflare zerotrust(可选,用于安全拦截)</li><li><a href=https://github.com/monlor/docker-gateway target=_blank rel=noreferrer>docker-gateway</a>(我编写的docker网关,用于给容器做代理策略,避免使用Firefox浏览器代理被检测)</li><li>socks5住宅IP代理(可选,根据需求购买,这里不做推荐)</li></ul><h2 id=部署 class="relative group">部署 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e9%83%a8%e7%bd%b2 aria-label>#</a></span></h2><p>我使用docker compose进行部署,以下是配置文件。我添加了gateway作为容器内部的代理网关,如果不需要使用代理,请去掉gateway网关服务和虚拟网卡的配置。</p><p>加载内核模块</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl>sudo apt install linux-modules-extra-<span class=sb>`</span>uname -r<span class=sb>`</span>
|
||
</span></span><span class=line><span class=cl>sudo modprobe binder_linux <span class=nv>devices</span><span class=o>=</span><span class=s2>"binder,hwbinder,vndbinder"</span>
|
||
</span></span><span class=line><span class=cl>sudo modprobe ashmem_linux
|
||
</span></span><span class=line><span class=cl>sudo modprobe xt_mark
|
||
</span></span><span class=line><span class=cl>sudo modprobe iptable_filter
|
||
</span></span><span class=line><span class=cl>sudo modprobe iptable_nat
|
||
</span></span><span class=line><span class=cl>sudo modprobe xt_TPROXY
|
||
</span></span><span class=line><span class=cl>sudo modprobe xt_socket
|
||
</span></span></code></pre></div><p>docker compose 配置</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=nt>services</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>nginx-proxy-manager</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>jc21/nginx-proxy-manager:2.11.3</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class=l>nginx</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>volumes</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>nginx_data:/data</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>nginx_cert:/etc/letsencrypt</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ports</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=m>80</span><span class=p>:</span><span class=m>80</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 管理端口,建议后面去掉</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=m>81</span><span class=p>:</span><span class=m>81</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=m>443</span><span class=p>:</span><span class=m>443</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class=l>unless-stopped</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>networks</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>default</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 5800</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>firefox-1</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>monlor/firefox</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>volumes</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>firefox-1:/config</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class=l>unless-stopped</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>environment</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>TZ=Australia/Sydney</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>LANG=en_AU.UTF-8</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 这个配置和docker-gateway搭配使用,将当前容器的默认网关指向docker-gateway服务,不添加这个变量则不走代理</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>GATEWAY_IP=172.100.0.2</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>networks</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipv4_address</span><span class=p>:</span><span class=w> </span><span class=m>172.100.0.11</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>default</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>scrcpy</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>monlor/ws-scrcpy</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class=l>scrcpy</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>environment</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 这里添加你的redroid adb地址,用逗号分隔,如:redroid-1:5555,redroid-2:5555</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ADB_ADDRESS=redroid-1:5555</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class=l>unless-stopped</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>networks</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>default</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipv4_address</span><span class=p>:</span><span class=w> </span><span class=m>172.100.0.50</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>redroid-1</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>redroid/redroid:13.0.0-latest</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class=l>redroid-1</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>privileged</span><span class=p>:</span><span class=w> </span><span class=kc>true</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>volumes</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>redroid-1:/data</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>command</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>androidboot.hardware=mt6891</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.secure=0</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.boot.hwc=GLOBAL</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 这里的imei需要修改,每个机器都不一样</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.ril.oem.imei=861503068112233</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.ril.oem.imei1=861503068112234</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.ril.oem.imei2=861503068112235</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.ril.miui.imei0=861503068112236</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.product.manufacturer=Xiaomi</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.product.model=droid-1</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>ro.build.product=chopin</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>redroid.width=720</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>redroid.height=1280</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>redroid.gpu.mode=guest</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>healthcheck</span><span class=p>:</span><span class=w> </span><span class=cp>&healthcheck</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>test</span><span class=p>:</span><span class=w> </span><span class=p>[</span><span class=s2>"CMD"</span><span class=p>,</span><span class=w> </span><span class=s2>"sh"</span><span class=p>,</span><span class=w> </span><span class=s2>"-c"</span><span class=p>,</span><span class=w> </span><span class=s2>"test \"1\" = \"`/system/bin/getprop sys.boot_completed`\""</span><span class=p>]</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>interval</span><span class=p>:</span><span class=w> </span><span class=l>30s</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>timeout</span><span class=p>:</span><span class=w> </span><span class=l>10s</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>retries</span><span class=p>:</span><span class=w> </span><span class=m>3</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>start_period</span><span class=p>:</span><span class=w> </span><span class=l>30s</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class=l>unless-stopped</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>networks</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipv4_address</span><span class=p>:</span><span class=w> </span><span class=m>172.100.0.51</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class=l>ghcr.io/monlor/docker-gateway:main</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class=l>gateway</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>environment</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 指定哪些容器ip需要走PH的代理,ip为容器ip,这里为firefox-1</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>RULE_TAG_PH=172.100.0.11/32</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 添加名为PH的socks代理,ip 端口 用户 密码</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>OUTBOUND_SERVER_PH=socks,2.2.2.2:58688:user:pass</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 再指定哪些容器ip走UK的代理,我这里随便写的gateway网络下的ip</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>RULE_TAG_UK=172.100.0.13/32</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=c># 再添加名为UK的socks代理,ip 端口 用户 密码</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>OUTBOUND_SERVER_UK=socks,3.3.3.3:58688:user:pass</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>privileged</span><span class=p>:</span><span class=w> </span><span class=kc>true</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>pid</span><span class=p>:</span><span class=w> </span><span class=l>host</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>volumes</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=l>/var/run/docker.sock:/var/run/docker.sock</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>networks</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipv4_address</span><span class=p>:</span><span class=w> </span><span class=m>172.100.0.2</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class=l>unless-stopped</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=nt>volumes</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>nginx_data</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>nginx_cert</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>redroid-1</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>firefox-1</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=nt>networks</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>default</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>driver</span><span class=p>:</span><span class=w> </span><span class=l>bridge</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipam</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>config</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=nt>subnet</span><span class=p>:</span><span class=w> </span><span class=s2>"172.18.0.0/16"</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w> </span><span class=s2>"172.18.0.1"</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>name</span><span class=p>:</span><span class=w> </span><span class=l>gateway</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>driver</span><span class=p>:</span><span class=w> </span><span class=l>bridge</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipam</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>config</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span>- <span class=nt>subnet</span><span class=p>:</span><span class=w> </span><span class=m>172.100.0.0</span><span class=l>/24</span><span class=w>
|
||
</span></span></span></code></pre></div><p>如果你没有安装docker,可以执行以下命令进行安装:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl>curl -sSL https://get.docker.com/ <span class=p>|</span> sh
|
||
</span></span></code></pre></div><p>将配置文件保存到你喜欢的文件夹,比如<code>/opt/server</code>,然后部署服务:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl><span class=nb>cd</span> /opt/server
|
||
</span></span><span class=line><span class=cl>docker compose up -d
|
||
</span></span></code></pre></div><p>查看容器日志:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl>docker compose logs
|
||
</span></span></code></pre></div><p>查看服务状态:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl>docker compose ps
|
||
</span></span></code></pre></div><h2 id=原理解释 class="relative group">原理解释 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e5%8e%9f%e7%90%86%e8%a7%a3%e9%87%8a aria-label>#</a></span></h2><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/17223162976681_hu_be46f3d76a660877.webp 330w,http://blog.hys.my/posts/android-firefox/17223162976681_hu_f8f3db69d4901a6.webp 660w
|
||
,http://blog.hys.my/posts/android-firefox/17223162976681_hu_7097303f9627b6a.webp 1024w
|
||
,http://blog.hys.my/posts/android-firefox/17223162976681_hu_fec8f824e15c1aff.webp 1320w" sizes=100vw type=image/webp><img width=1536 height=818 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/17223162976681_hu_ef9087b2382984e5.webp srcset="http://blog.hys.my/posts/android-firefox/17223162976681_hu_fb24bf243ffa5db4.webp 330w,http://blog.hys.my/posts/android-firefox/17223162976681_hu_ef9087b2382984e5.webp 660w
|
||
,http://blog.hys.my/posts/android-firefox/17223162976681_hu_74b9f0ee81638373.webp 1024w
|
||
,http://blog.hys.my/posts/android-firefox/17223162976681_hu_fae55deeae4ba3f5.webp 1320w" sizes=100vw></picture></figure></p><h3 id=cloudflare-zero-trust-安全拦截 class="relative group">Cloudflare Zero Trust 安全拦截 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#cloudflare-zero-trust-%e5%ae%89%e5%85%a8%e6%8b%a6%e6%88%aa aria-label>#</a></span></h3><blockquote><p>非必需</p></blockquote><p>拦截scrcpy和firefox的域名,使用github oauth登陆,保证服务安全性</p><h3 id=nginx-proxy-manager class="relative group">nginx proxy manager <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#nginx-proxy-manager aria-label>#</a></span></h3><p>使用81端口访问,用于反向代理,ssl证书申请,如果你不使用zero trust,可以在这一层做basic认证,可以参考以下配置</p><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/17223144664974_hu_8a69fb914b703400.webp 330w,http://blog.hys.my/posts/android-firefox/17223144664974_hu_650cf677a8008b5.webp 660w
|
||
,http://blog.hys.my/posts/android-firefox/17223144664974_hu_b6b2dcde254f7257.webp 1024w
|
||
,http://blog.hys.my/posts/android-firefox/17223144664974_hu_92bac8069628a213.webp 1320w" sizes=100vw type=image/webp><img width=2694 height=1752 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/17223144664974_hu_f8becffeab4fcf23.webp srcset="http://blog.hys.my/posts/android-firefox/17223144664974_hu_7b0680262d5c3d44.webp 330w,http://blog.hys.my/posts/android-firefox/17223144664974_hu_f8becffeab4fcf23.webp 660w
|
||
,http://blog.hys.my/posts/android-firefox/17223144664974_hu_38980a37bd352065.webp 1024w
|
||
,http://blog.hys.my/posts/android-firefox/17223144664974_hu_3f2d191317113e08.webp 1320w" sizes=100vw></picture></figure></p><p>我还在这一层配置了cf的ip白名单,保证cf => nginx的安全性</p><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/17223145106545_hu_5e3793d176ae721e.webp 330w,http://blog.hys.my/posts/android-firefox/17223145106545_hu_548a61636d954c7c.webp 660w
|
||
,http://blog.hys.my/posts/android-firefox/17223145106545_hu_63c33d715333a9a2.webp 1024w
|
||
,http://blog.hys.my/posts/android-firefox/17223145106545_hu_7b8cf5eee5be70f4.webp 1320w" sizes=100vw type=image/webp><img width=2694 height=1752 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/17223145106545_hu_b647428c98e85cd0.webp srcset="http://blog.hys.my/posts/android-firefox/17223145106545_hu_91f713bfacc21b9b.webp 330w,http://blog.hys.my/posts/android-firefox/17223145106545_hu_b647428c98e85cd0.webp 660w
|
||
,http://blog.hys.my/posts/android-firefox/17223145106545_hu_26fcedc4ebae78f5.webp 1024w
|
||
,http://blog.hys.my/posts/android-firefox/17223145106545_hu_14041153dbe995d4.webp 1320w" sizes=100vw></picture></figure></p><h3 id=docker-host class="relative group">Docker Host <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#docker-host aria-label>#</a></span></h3><ul><li><code>ws-scrcpy</code>用于远程控制多个安卓设备(如<code>redroid-1</code>和<code>redroid-2</code>)。</li><li><code>redroid-1</code>和<code>redroid-2</code>运行安卓系统实例。</li><li><code>firefox-1</code>运行<code>Firefox</code>浏览器实例。</li></ul><h3 id=ws-scrcpy class="relative group">ws-scrcpy <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#ws-scrcpy aria-label>#</a></span></h3><p>需要添加环境变量,指定你要管理的<code>redroid</code>实例,有多少个<code>redroid</code>就添加多少个,会自动帮你连接。同时,当你重启<code>redroid</code>之后,也需要重启<code>scrcpy</code>。</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=l>ADB_ADDRESS=redroid-1:5555,redoird-2:5555</span><span class=w>
|
||
</span></span></span></code></pre></div><h3 id=docker-gateway class="relative group">Docker Gateway <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#docker-gateway aria-label>#</a></span></h3><blockquote><p>非必需,这里以<code>firefox-1</code>举例</p></blockquote><p>固定<code>firefox-1</code>容器的ip,方便做分流,例如</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=nn>...</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=nt>networks</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>gateway</span><span class=p>:</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=w> </span><span class=nt>ipv4_address</span><span class=p>:</span><span class=w> </span><span class=m>172.100.0.11</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=nn>...</span><span class=w>
|
||
</span></span></span></code></pre></div><p>在容器中添加环境变量,修改默认网关,执行我们的<code>docker-gateway</code>网关</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl>- <span class=l>GATEWAY_IP=172.100.0.2</span><span class=w>
|
||
</span></span></span></code></pre></div><p>在<code>docker-gateway</code>容器中添加环境变量代理,指定<code>firefox-1</code>走哪个代理,以下指定ip为<code>172.100.0.11</code>的<code>firefox-1</code>容器走PH这个代理。</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-yaml data-lang=yaml><span class=line><span class=cl><span class=nn>...</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=c># 指定哪些容器ip需要走PH的代理,ip为容器ip,这里为firefox-1</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl>- <span class=l>RULE_TAG_PH=172.100.0.11/32</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl><span class=c># 添加名为PH的socks代理,ip 端口 用户 密码</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl>- <span class=l>OUTBOUND_SERVER_PH=socks,2.2.2.2:58688:user:pass</span><span class=w>
|
||
</span></span></span><span class=line><span class=cl>- <span class=l>...</span><span class=w>
|
||
</span></span></span></code></pre></div><p>看到这里你应该明白<code>docker-gateway</code>的工作原理了,要是不明白就实操。</p><h2 id=效果图 class="relative group">效果图 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e6%95%88%e6%9e%9c%e5%9b%be aria-label>#</a></span></h2><p>安卓在手机上打开支持触摸,体验不错,在电脑上打开支持键盘输入。都可以很方便的共享给其他人使用。</p><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_50fa792a0b0f9501.webp 330w,http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_5d5c604ac8fe6bd9.webp 660w
|
||
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_3b527aff78949129.webp 1024w
|
||
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_56f7a3746a415bc.webp 1320w" sizes=100vw type=image/webp><img width=2694 height=1752 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_a443fea8ae267f9d.webp srcset="http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_e373c3eb5a4f7f6d.webp 330w,http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_a443fea8ae267f9d.webp 660w
|
||
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_6e6bce5e6c8ea135.webp 1024w
|
||
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klpz_hu_df1ddccfe6b7117e.webp 1320w" sizes=100vw></picture></figure></p><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_ca5b4ac83ecc03cd.webp 330w,http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_7a02099826243b18.webp 660w
|
||
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_43b367884d2ebf43.webp 1024w
|
||
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_f91b358fed02698d.webp 1320w" sizes=100vw type=image/webp><img width=2694 height=1752 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_1501846d6386c93d.webp srcset="http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_3071021c7c7126af.webp 330w,http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_1501846d6386c93d.webp 660w
|
||
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_6b92363905df88c5.webp 1024w
|
||
,http://blog.hys.my/posts/android-firefox/SCR-20240730-klqr_hu_e9fd61d2d2865a33.webp 1320w" sizes=100vw></picture></figure></p><p><figure><picture class="mx-auto my-0 rounded-md"><source srcset="http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_c627fca8bc38a99f.webp 330w,http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_f974c875c4d039e.webp 660w
|
||
,http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_6f0b8f7351ea437e.webp 1024w
|
||
,http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_c0a611f5a312134c.webp 1320w" sizes=100vw type=image/webp><img width=2694 height=1752 class="mx-auto my-0 rounded-md" alt=图片 loading=lazy decoding=async src=http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_edf471a2de17ce7f.jpeg srcset="http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_57afe701b877eb87.jpeg 330w,http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_edf471a2de17ce7f.jpeg 660w
|
||
,http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_c6026aede32edfe6.jpeg 1024w
|
||
,http://blog.hys.my/posts/android-firefox/SCR-20240730-kloa_hu_5f364182c615b9f.jpeg 1320w" sizes=100vw></picture></figure>最后修改:2024 年 09 月 10 日</p><p>© 允许规范转载</p></div></section><footer class="max-w-prose pt-8 print:hidden"><div class=flex><picture class="!mb-0 !mt-0 me-4 w-24 h-auto rounded-full"><img width=480 height=480 class="!mb-0 !mt-0 me-4 w-24 h-auto rounded-full" alt=华禹 loading=lazy decoding=async src=http://blog.hys.my/img/author.png></picture><div class=place-self-center><div class="text-[0.6rem] uppercase leading-3 text-neutral-500 dark:text-neutral-400"></div><div class="font-semibold leading-6 text-neutral-800 dark:text-neutral-300">华禹</div><div class="text-sm text-neutral-700 dark:text-neutral-400">北京理工大学医学技术学院研究生<br>AI食品营养量化初创公司联合创始人</div><div class="text-2xl sm:text-lg"><div class="flex flex-wrap text-neutral-400 dark:text-neutral-500"><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=mailto:hello@your_domain.com target=_blank aria-label=Email rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 512 512"><path fill="currentColor" d="M207.8 20.73c-93.45 18.32-168.7 93.66-187 187.1-27.64 140.9 68.65 266.2 199.1 285.1 19.01 2.888 36.17-12.26 36.17-31.49l1e-4-.6631c0-15.74-11.44-28.88-26.84-31.24-84.35-12.98-149.2-86.13-149.2-174.2.0-102.9 88.61-185.5 193.4-175.4 91.54 8.869 158.6 91.25 158.6 183.2v16.16c0 22.09-17.94 40.05-40 40.05s-40.01-17.96-40.01-40.05v-120.1c0-8.847-7.161-16.02-16.01-16.02l-31.98.0036c-7.299.0-13.2 4.992-15.12 11.68-24.85-12.15-54.24-16.38-86.06-5.106-38.75 13.73-68.12 48.91-73.72 89.64-9.483 69.01 43.81 128 110.9 128 26.44.0 50.43-9.544 69.59-24.88 24 31.3 65.23 48.69 109.4 37.49C465.2 369.3 496 324.1 495.1 277.2V256.3c0-149.2-133.9-265.632-287.3-235.57zM239.1 304.3c-26.47.0-48-21.56-48-48.05s21.53-48.05 48-48.05 48 21.56 48 48.05-20.6 48.05-48 48.05z"/></svg>
|
||
</span></a><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=https://link-to-some-website.com/ target=_blank aria-label=Link rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 640 512"><path fill="currentColor" d="M172.5 131.1c55.6-55.59 148-55.59 203.6.0 50 50 57.4 129.7 16.3 187.2L391.3 319.9C381 334.2 361 337.6 346.7 327.3c-14.4-10.3-17.8-30.3-7.5-44.6L340.3 281.1C363.2 249 359.6 205.1 331.7 177.2c-31.4-31.4-82.5-31.4-114 0L105.5 289.5c-31.51 30.6-31.51 82.5.0 114C133.3 431.4 177.3 435 209.3 412.1L210.9 410.1C225.3 400.7 245.3 404 255.5 418.4 265.8 432.8 262.5 452.8 248.1 463.1L246.5 464.2c-58.4 41.1-136.3 34.5-186.29-15.4-56.469-56.5-56.469-148.1.0-204.5L172.5 131.1zM467.5 380c-56.5 56.5-148 56.5-204.5.0-50-50-56.5-128.8-15.4-186.3L248.7 192.1C258.1 177.8 278.1 174.4 293.3 184.7 307.7 194.1 311.1 214.1 300.8 229.3L299.7 230.9C276.8 262.1 280.4 306.9 308.3 334.8c31.4 31.4 82.5 31.4 114 0L534.5 222.5c31.5-31.5 31.5-83.4.0-114C506.7 80.63 462.7 76.99 430.7 99.9L429.1 101C414.7 111.3 394.7 107.1 384.5 93.58 374.2 79.2 377.5 59.21 391.9 48.94L393.5 47.82C451 6.731 529.8 13.25 579.8 63.24c56.5 56.46 56.5 148.06.0 204.46L467.5 380z"/></svg>
|
||
</span></a><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=https://www.amazon.com/hz/wishlist/ls/wishlist-id target=_blank aria-label=Amazon rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 448 512"><path fill="currentColor" d="M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5.0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2.0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1.0 27.1-6.5 43.1z"/></svg>
|
||
</span></a><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=https://www.apple.com target=_blank aria-label=Apple rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 384 512"><path fill="currentColor" d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8.0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"/></svg>
|
||
</span></a><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=https://xing.com/profile/username target=_blank aria-label=Xing rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 384 512"><path fill="currentColor" d="M162.7 210c-1.8 3.3-25.2 44.4-70.1 123.5-4.9 8.3-10.8 12.5-17.7 12.5H9.8c-7.7.0-12.1-7.5-8.5-14.4l69-121.3c.2.0.2-.1.0-.3l-43.9-75.6c-4.3-7.8.3-14.1 8.5-14.1H1e2c7.3.0 13.3 4.1 18 12.2l44.7 77.5zM382.6 46.1l-144 253v.3L330.2 466c3.9 7.1.2 14.1-8.5 14.1h-65.2c-7.6.0-13.6-4-18-12.2l-92.4-168.5c3.3-5.8 51.5-90.8 144.8-255.2 4.6-8.1 10.4-12.2 17.5-12.2h65.7c8 0 12.3 6.7 8.5 14.1z"/></svg></span></a></div></div></div></div><div class=pt-8><hr class="border-dotted border-neutral-300 dark:border-neutral-600"><div class="flex justify-between pt-3"><span><a class="group flex" href=http://blog.hys.my/posts/first-post/><span class="me-2 text-neutral-700 transition-transform group-hover:-translate-x-[2px] group-hover:text-primary-600 dark:text-neutral dark:group-hover:text-primary-400"><span class="ltr:inline rtl:hidden">←</span><span class="ltr:hidden rtl:inline">→</span></span>
|
||
<span class="flex flex-col"><span class="mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration-primary-500">我的第一篇文章</span>
|
||
<span class="mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400"><time datetime="2024-05-29 10:00:00 +0800 +0800"></time>
|
||
</span></span></a></span><span><a class="group flex text-right" href=http://blog.hys.my/posts/minio/><span class="flex flex-col"><span class="mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration-primary-500">MinIO对象存储部署:S3兼容的私有化存储方案</span>
|
||
<span class="mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400"><time datetime="2026-04-18 10:00:00 +0800 +0800"></time>
|
||
</span></span><span class="ms-2 text-neutral-700 transition-transform group-hover:-translate-x-[-2px] group-hover:text-primary-600 dark:text-neutral dark:group-hover:text-primary-400"><span class="ltr:inline rtl:hidden">→</span><span class="ltr:hidden rtl:inline">←</span></span></a></span></div></div></footer></article></main><div class="pointer-events-none absolute bottom-0 end-0 top-[100vh] w-12" id=to-top hidden=true><a href=#the-top class="pointer-events-auto sticky top-[calc(100vh-5.5rem)] flex h-12 w-12 items-center justify-center rounded-full bg-neutral/50 text-xl text-neutral-700 backdrop-blur hover:text-primary-600 dark:bg-neutral-800/50 dark:text-neutral dark:hover:text-primary-400" aria-label title>↑</a></div><footer class="py-10 print:hidden"><div class="flex items-center justify-between"><div><p class="text-sm text-neutral-500 dark:text-neutral-400">©
|
||
2026
|
||
华禹</p><p class="text-xs text-neutral-500 dark:text-neutral-400"></p></div><div class="flex flex-row items-center"></div></div></footer><div id=search-wrapper class="invisible fixed inset-0 z-50 flex h-screen w-screen cursor-default flex-col bg-neutral-500/50 p-4 backdrop-blur-sm dark:bg-neutral-900/50 sm:p-6 md:p-[10vh] lg:p-[12vh]" data-url=http://blog.hys.my/><div id=search-modal class="top-20 mx-auto flex min-h-0 w-full max-w-3xl flex-col rounded-md border border-neutral-200 bg-neutral shadow-lg dark:border-neutral-700 dark:bg-neutral-800"><header class="relative z-10 flex flex-none items-center justify-between px-2"><form class="flex min-w-0 flex-auto items-center"><div class="flex h-8 w-8 items-center justify-center text-neutral-400"><span class="icon relative inline-block px-1 align-text-bottom"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" viewBox="0 0 512 512"><path fill="currentColor" d="M505 442.7 405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9.0 208 0S0 93.1.0 208s93.1 208 208 208c48.3.0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9.0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7.0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7.0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg></span></div><input type=search id=search-query class="mx-1 flex h-12 flex-auto appearance-none bg-transparent focus:outline-dotted focus:outline-2 focus:outline-transparent" placeholder tabindex=0></form><button id=close-search-button class="flex h-8 w-8 items-center justify-center text-neutral-700 hover:text-primary-600 dark:text-neutral dark:hover:text-primary-400" title>
|
||
<span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 320 512"><path fill="currentColor" d="M310.6 361.4c12.5 12.5 12.5 32.75.0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3 54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75.0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75.0-45.25s32.75-12.5 45.25.0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25.0s12.5 32.75.0 45.25l-105.4 105.4L310.6 361.4z"/></svg></span></button></header><section class="flex-auto overflow-auto px-2"><ul id=search-results></ul></section></div></div></div></body></html> |