docker-documentation/general/fleet/index.html

54 wiersze
87 KiB
HTML
Czysty Zwykły widok Historia

<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="Fleet is a web-based image management tool for organisations who ship a large list of Docker images."><meta name=author content=LinuxServer.io><link href=https://docs.linuxserver.io/general/fleet/ rel=canonical><link href=../volumes/ rel=prev><link href=../swag/ rel=next><link rel=icon href=../../assets/favicon.ico><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.5.49"><title>Fleet - LinuxServer.io</title><link rel=stylesheet href=../../assets/stylesheets/main.6f8fc17f.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><link rel=stylesheet href=../../assets/stylesheets/mkdocs_d2_plugin.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=purple data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#fleet class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title=LinuxServer.io class="md-header__button md-logo" aria-label=LinuxServer.io data-md-component=logo> <img src=../../assets/icon.svg alt=logo> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> LinuxServer.io </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Fleet </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=purple data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=purple data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-col
</span><span id=__span-0-2><a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=w> </span><span class=s2>&quot;status&quot;</span><span class=o>:</span><span class=w> </span><span class=s2>&quot;OK&quot;</span><span class=p>,</span>
</span><span id=__span-0-3><a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=w> </span><span class=s2>&quot;data&quot;</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-0-4><a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=w> </span><span class=s2>&quot;totalPullCount&quot;</span><span class=o>:</span><span class=w> </span><span class=mf>1862494227</span><span class=p>,</span>
</span><span id=__span-0-5><a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=w> </span><span class=s2>&quot;repositories&quot;</span><span class=o>:</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-0-6><a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=w> </span><span class=s2>&quot;lsiobase&quot;</span><span class=o>:</span><span class=w> </span><span class=p>[</span>
</span><span id=__span-0-7><a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=w> </span><span class=p>{</span>
</span><span id=__span-0-8><a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=w> </span><span class=s2>&quot;name&quot;</span><span class=o>:</span><span class=w> </span><span class=s2>&quot;alpine&quot;</span><span class=p>,</span>
</span><span id=__span-0-9><a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=w> </span><span class=s2>&quot;pullCount&quot;</span><span class=o>:</span><span class=w> </span><span class=mf>4275970</span><span class=p>,</span>
</span><span id=__span-0-10><a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=w> </span><span class=s2>&quot;version&quot;</span><span class=o>:</span><span class=w> </span><span class=s2>&quot;3.6&quot;</span><span class=p>,</span>
</span><span id=__span-0-11><a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a><span class=w> </span><span class=s2>&quot;stable&quot;</span><span class=o>:</span><span class=w> </span><span class=kc>true</span>
</span><span id=__span-0-12><a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a><span class=w> </span><span class=p>},</span>
</span><span id=__span-0-13><a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a><span class=w> </span><span class=p>{</span>
</span><span id=__span-0-14><a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a><span class=w> </span><span class=s2>&quot;name&quot;</span><span class=o>:</span><span class=w> </span><span class=s2>&quot;alpine.arm64&quot;</span><span class=p>,</span>
</span><span id=__span-0-15><a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a><span class=w> </span><span class=s2>&quot;pullCount&quot;</span><span class=o>:</span><span class=w> </span><span class=mf>66234</span><span class=p>,</span>
</span><span id=__span-0-16><a id=__codelineno-0-16 name=__codelineno-0-16 href=#__codelineno-0-16></a><span class=w> </span><span class=s2>&quot;version&quot;</span><span class=o>:</span><span class=w> </span><span class=s2>&quot;edge&quot;</span><span class=p>,</span>
</span><span id=__span-0-17><a id=__codelineno-0-17 name=__codelineno-0-17 href=#__codelineno-0-17></a><span class=w> </span><span class=s2>&quot;stable&quot;</span><span class=o>:</span><span class=w> </span><span class=kc>true</span>
</span><span id=__span-0-18><a id=__codelineno-0-18 name=__codelineno-0-18 href=#__codelineno-0-18></a><span class=w> </span><span class=p>},</span>
</span><span id=__span-0-19><a id=__codelineno-0-19 name=__codelineno-0-19 href=#__codelineno-0-19></a><span class=w> </span><span class=p>...</span>
</span><span id=__span-0-20><a id=__codelineno-0-20 name=__codelineno-0-20 href=#__codelineno-0-20></a><span class=w> </span><span class=p>],</span>
</span><span id=__span-0-21><a id=__codelineno-0-21 name=__codelineno-0-21 href=#__codelineno-0-21></a><span class=w> </span><span class=s2>&quot;linuxserver&quot;</span><span class=o>:</span><span class=w> </span><span class=p>[</span>
</span><span id=__span-0-22><a id=__codelineno-0-22 name=__codelineno-0-22 href=#__codelineno-0-22></a><span class=w> </span><span class=p>{</span>
</span><span id=__span-0-23><a id=__codelineno-0-23 name=__codelineno-0-23 href=#__codelineno-0-23></a><span class=w> </span><span class=s2>&quot;name&quot;</span><span class=o>:</span><span class=w> </span><span class=s2>&quot;airsonic&quot;</span><span class=p>,</span>
</span><span id=__span-0-24><a id=__codelineno-0-24 name=__codelineno-0-24 href=#__codelineno-0-24></a><span class=w> </span><span class=s2>&quot;pullCount&quot;</span><span class=o>:</span><span class=w> </span><span class=mf>4608329</span><span class=p>,</span>
</span><span id=__span-0-25><a id=__codelineno-0-25 name=__codelineno-0-25 href=#__codelineno-0-25></a><span class=w> </span><span class=s2>&quot;version&quot;</span><span class=o>:</span><span class=w> </span><span class=s2>&quot;v10.2.1&quot;</span><span class=p>,</span>
</span><span id=__span-0-26><a id=__codelineno-0-26 name=__codelineno-0-26 href=#__codelineno-0-26></a><span class=w> </span><span class=s2>&quot;stable&quot;</span><span class=o>:</span><span class=w> </span><span class=kc>true</span>
</span><span id=__span-0-27><a id=__codelineno-0-27 name=__codelineno-0-27 href=#__codelineno-0-27></a><span class=w> </span><span class=p>},</span>
</span><span id=__span-0-28><a id=__codelineno-0-28 name=__codelineno-0-28 href=#__codelineno-0-28></a><span class=w> </span><span class=p>{</span>
</span><span id=__span-0-29><a id=__codelineno-0-29 name=__codelineno-0-29 href=#__codelineno-0-29></a><span class=w> </span><span class=s2>&quot;name&quot;</span><span class=o>:</span><span class=w> </span><span class=s2>&quot;apache&quot;</span><span class=p>,</span>
</span><span id=__span-0-30><a id=__codelineno-0-30 name=__codelineno-0-30 href=#__codelineno-0-30></a><span class=w> </span><span class=s2>&quot;pullCount&quot;</span><span class=o>:</span><span class=w> </span><span class=mf>3011699</span><span class=p>,</span>
</span><span id=__span-0-31><a id=__codelineno-0-31 name=__codelineno-0-31 href=#__codelineno-0-31></a><span class=w> </span><span class=s2>&quot;version&quot;</span><span class=o>:</span><span class=w> </span><span class=s2>&quot;latest&quot;</span><span class=p>,</span>
</span><span id=__span-0-32><a id=__codelineno-0-32 name=__codelineno-0-32 href=#__codelineno-0-32></a><span class=w> </span><span class=s2>&quot;stable&quot;</span><span class=o>:</span><span class=w> </span><span class=kc>true</span>
</span><span id=__span-0-33><a id=__codelineno-0-33 name=__codelineno-0-33 href=#__codelineno-0-33></a><span class=w> </span><span class=p>},</span>
</span><span id=__span-0-34><a id=__codelineno-0-34 name=__codelineno-0-34 href=#__codelineno-0-34></a><span class=w> </span><span class=p>...</span>
</span><span id=__span-0-35><a id=__codelineno-0-35 name=__codelineno-0-35 href=#__codelineno-0-35></a><span class=w> </span><span class=p>]</span>
</span><span id=__span-0-36><a id=__codelineno-0-36 name=__codelineno-0-36 href=#__codelineno-0-36></a><span class=w> </span><span class=p>...</span>
</span><span id=__span-0-37><a id=__codelineno-0-37 name=__codelineno-0-37 href=#__codelineno-0-37></a><span class=w> </span><span class=p>}</span>
</span><span id=__span-0-38><a id=__codelineno-0-38 name=__codelineno-0-38 href=#__codelineno-0-38></a><span class=w> </span><span class=p>}</span>
</span><span id=__span-0-39><a id=__codelineno-0-39 name=__codelineno-0-39 href=#__codelineno-0-39></a><span class=p>}</span>
</span></code></pre></div> <p _=% endapi-method=endapi-method>{% endapi-method-response-example %} {% endapi-method-response %} {% endapi-method-spec %}</p> <div class="admonition info"> <p class=admonition-title>Info</p> <p>Any repositories not synchronized with Docker Hub (e.g. staging or metadata repositories) will not be returned as part of the API. This also applies to images which the repository owner does not wish to be part of the primary image list.</p> </div> <h2 id=running-fleet>Running Fleet<a class=headerlink href=#running-fleet title="Permanent link">&para;</a></h2> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>Fleet is a Java application and requires at least JRE 11.</p> </div> <p>Grab the latest Fleet release from <a href=https://github.com/linuxserver/fleet/releases>GitHub</a>.</p> <h3 id=sql>SQL<a class=headerlink href=#sql title="Permanent link">&para;</a></h3> <p>Fleet stores its data in a MariaDB database which you need to provide. In order for the application to manage its tables and procedures, the user you provide it needs to have the relevant <code>GRANT</code> permissions to the fleet database. The following script should be sufficient to get the initial database set up.</p> <div class="language-sql highlight"><pre><span></span><code><span id=__span-1-1><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=k>CREATE</span><span class=w> </span><span class=k>SCHEMA</span><span class=w> </span><span class=o>`</span><span class=n>fleet</span><span class=o>`</span><span class=p>;</span>
</span><span id=__span-1-2><a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=k>CREATE</span><span class=w> </span><span class=k>USER</span><span class=w> </span><span class=s1>&#39;fleet_user&#39;</span><span class=w> </span><span class=n>IDENTIFIED</span><span class=w> </span><span class=k>BY</span><span class=w> </span><span class=s1>&#39;supersecretpassword&#39;</span><span class=p>;</span>
</span><span id=__span-1-3><a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=k>GRANT</span><span class=w> </span><span class=k>ALL</span><span class=w> </span><span class=k>ON</span><span class=w> </span><span class=o>`</span><span class=n>fleet</span><span class=o>`</span><span class=p>.</span><span class=o>*</span><span class=w> </span><span class=k>TO</span><span class=w> </span><span class=s1>&#39;fleet_user&#39;</span><span class=p>;</span>
</span></code></pre></div> <p>The username and password that you define must then be provided as part of Fleet's configuration.</p> <h3 id=configuration-file>Configuration File<a class=headerlink href=#configuration-file title="Permanent link">&para;</a></h3> <p>All primary configuration for Fleet at runtime is loaded in via a <code>fleet.properties</code> file. This can be located anywhere on the file system, and is loaded in via a Runtime argument:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-2-1><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=c1># Runtime</span>
</span><span id=__span-2-2><a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a>fleet.app.port<span class=o>=</span><span class=m>8080</span>
</span><span id=__span-2-3><a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a>
</span><span id=__span-2-4><a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a><span class=c1># Database Connectivity</span>
</span><span id=__span-2-5><a id=__codelineno-2-5 name=__codelineno-2-5 href=#__codelineno-2-5></a>fleet.database.driver<span class=o>=</span>org.mariadb.jdbc.Driver
</span><span id=__span-2-6><a id=__codelineno-2-6 name=__codelineno-2-6 href=#__codelineno-2-6></a>fleet.database.url<span class=o>=</span>jdbc:mariadb://&lt;IP_OR_URL&gt;:3306/fleet
</span><span id=__span-2-7><a id=__codelineno-2-7 name=__codelineno-2-7 href=#__codelineno-2-7></a>fleet.database.username<span class=o>=</span>&lt;fleet_sql_user&gt;
</span><span id=__span-2-8><a id=__codelineno-2-8 name=__codelineno-2-8 href=#__codelineno-2-8></a>fleet.database.password<span class=o>=</span>&lt;fleet_sql_password&gt;
</span><span id=__span-2-9><a id=__codelineno-2-9 name=__codelineno-2-9 href=#__codelineno-2-9></a>
</span><span id=__span-2-10><a id=__codelineno-2-10 name=__codelineno-2-10 href=#__codelineno-2-10></a><span class=c1># Password security</span>
</span><span id=__span-2-11><a id=__codelineno-2-11 name=__codelineno-2-11 href=#__codelineno-2-11></a>fleet.admin.secret<span class=o>=</span>&lt;a_random_string&gt;
</span></code></pre></div> <p>All configuration can be loaded either via the config file, via JVM arguments, or via the system environment. Fleet will first look in the configuration file, then JVM runtime, and finally in the system environment. It will load the first value it finds, which can be useful when needing to override specific properties.</p> <div class="admonition info"> <p class=admonition-title>Info</p> <p>If you place a property in the system environment, ensure that the property uses underscores rather than periods. This is due to a limitation in BASH environments where exported variables must not contain this character. E.g. <code>fleet.app.port=8080</code> becomes <code>export fleet_app_port=8080</code></p> </div> <table> <thead> <tr> <th style="text-align: left;">Property Name</th> <th style="text-align: left;">Purpose</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><code>fleet.app.port</code></td> <td style="text-align: left;">The port which the application will be running under.</td> </tr> <tr> <td style="text-align: left;"><code>fleet.admin.secret</code></td> <td style="text-align: left;">A string used as part of the password key derivation process. This secret is prepended to the raw password before its key is derived, providing further pseudo-randomness to hashed passwords. <strong>Once set, this must not be changed!</strong> It is vital to remain the same, as it will be used during the password verification step. If Fleet is restarted with this removed or set differently, the password verification process will fail because previously hashed passwords will have been derived with the old secret.</td> </tr> <tr> <td style="text-align: left;"><code>fleet.database.driver</code></td> <td style="text-align: left;">The driver to use for connections to Fleet's database. This should be <code>org.mariadb.jdbc.Driver</code></td> </tr> <tr> <td style="text-align: left;"><code>fleet.database.url</code></td> <td style="text-align: left;">The full JDBC connection string to the database.</td> </tr> <tr> <td style="text-align: left;"><code>fleet.database.username</code></td> <td style="text-align: left;">The username of the SQL user which will be managing the data in the Fleet database. <strong>This should have full GRANT access</strong> to the fleet database as it also manages any database migrations.</td> </tr> <tr> <td style="text-align: left;"><code>fleet.database.password</code></td> <td style="text-align: left;">The password for the SQL user</td> </tr> </tbody> </table> <h3 id=runtime-arguments>Runtime Arguments<a class=headerlink href=#runtime-arguments title="Permanent link">&para;</a></h3> <p>As well as the base configuration file, Fleet also supports some runtime arguments by means of the <code>-D</code> flag. These can be used to direct Fleet to behave in a specific way at runtime.</p> <div class="admonition info"> <p class=admonition-title>Info</p> <p>Unlike the properties defined above, these properties are only accessed via the JVM arguments (<code>-D</code>).</p> </div> <table> <thead> <tr> <th style="text-align: left;">Runtime Argument</th> <th style="text-align: left;">Purpose</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;"><code>fleet.config.base</code></td> <td style="text-align: left;">The absolute path of the configuration file.</td> </tr> <tr> <td style="text-align: left;"><code>fleet.show.passwords</code></td> <td style="text-align: left;">Tells fleet to show passwords in plain text in its logs. <strong>Not recommended</strong>.</td> </tr> <tr> <td style="text-align: left;"><code>fleet.nuke.database</code></td> <td style="text-align: left;"><strong>Be very careful.</strong> This will tell Fleet to completely wipe and rebuild its database. This can be useful if the owner deems the database to be too far out of synchronisation with Docker Hub, or if images have since been removed but are still showing in Fleet.</td> </tr> <tr> <td style="text-align: left;"><code>fleet.skip.sync.on.startup</code></td> <td style="text-align: left;">By default, Fleet will run a synch