{% extends "base.html" %} {% block title %}Containers{% endblock %} {% block breadcrumb %}Containers{% endblock %} {% block extra_head %} {% endblock %} {% block content %}
Docker container lifecycle management, images, volumes, networks, compose services & real-time monitoring.
{{ error or 'Docker daemon is not running or the Docker CLI is not installed.' }}
Install Docker: brew install docker or visit
docs.docker.com
A Dockerfile was found in your workspace. Start Docker to manage containers.
{% endif %}| Name | Image | Status | Ports | CPU | Memory | Net I/O | Uptime | Actions | |
|---|---|---|---|---|---|---|---|---|---|
|
{{ c.name }}
|
{{ c.image }} |
{{ c.status_icon }} {{ c.state }} | {% if c.ports %} {% for port in c.ports.split(', ') if port %}{{ port }}{% endfor %} {% else %}—{% endif %} | {% if c.stats %} {{ c.stats.cpu }} {% set cpu_val = c.stats.cpu|replace('%','')|float %} {% else %}—{% endif %} | {% if c.stats %} {{ c.stats.memory }} {% set mem_val = c.stats.mem_perc|replace('%','')|float %} {% else %}—{% endif %} | {% if c.stats %}{{ c.stats.net_io }}{% else %}—{% endif %} | {{ c.running_for|default(c.created[:19] if c.created else '—') }} |
{% if c.state == 'running' %}
{% elif c.state == 'exited' or c.state == 'created' or c.state == 'dead' %}
{% elif c.state == 'paused' %}
{% elif c.state == 'restarting' %}
{% endif %}
|
|
No containers found. Run docker compose up -d or click Run to start one. | |||||||||
No docker-compose.yml found. Run aq deploy compose to generate one.
| Repository | Tag | Image ID | Size | Created | Actions |
|---|---|---|---|---|---|
| {{ img.repository }} | {{ img.tag }} | {{ img.id[:12] }} |
{{ img.size }} | {{ img.created[:19] if img.created else '—' }} |
|
No Docker images found.
| Name | Driver | Mountpoint | Actions |
|---|---|---|---|
| {{ vol.name }} | {{ vol.driver }} | {{ vol.mountpoint }} |
|
No Docker volumes found.
| Name | Driver | Scope | Network ID | Actions |
|---|---|---|---|---|
| {{ net.name }} | {{ net.driver }} | {{ net.scope }} | {{ net.id[:12] }} |
{% if net.name not in ['bridge', 'host', 'none'] %}
{% endif %}
|
No Docker networks found.
No Dockerfile found. Run aq deploy dockerfile to generate one.
No Dockerfile found. Create a Dockerfile first to use the build feature.
Free up disk space by removing unused Docker objects. ⚠ These operations are irreversible.
Select a container from the dropdown to view its real-time logs.
Add a docker-compose.yml with service dependencies to view the topology graph.
Are you sure you want to proceed?
'+(d.Id||'').substring(0,12)+''+escHtml(conf.Image||'')+''+escHtml((conf.Cmd||[]).join(' '))+''+escHtml((conf.Entrypoint||[]).join(' ')||'—')+''+escHtml(conf.WorkingDir||'/')+'| Variable | Value |
|---|---|
| '+escHtml(k)+' | '+escHtml(v)+' |
No environment variables set.
'; } envHtml+='No mounts configured.
'; } mountHtml+=''+(ni.IPAddress||'—')+''+(ni.Gateway||'—')+''+(ni.MacAddress||'—')+''+(ni.NetworkID||'').substring(0,12)+'Not connected to any network.
'; } netHtml+='Run commands inside the container. '+(state==='running'?'':'Container must be running to exec.')+'
'+ 'Files added (A), changed (C) or deleted (D) since container creation.
'+ ''+escHtml(d.Name||'')+''+escHtml(d.Mountpoint||'')+''+escHtml(d.Name||'')+''+(d.Id||'').substring(0,12)+''+escHtml(ipamCfg.Subnet||'—')+''+escHtml(ipamCfg.Gateway||'—')+''+escHtml(ipamCfg.IPRange||'—')+''+(ci.IPv4Address||'—')+''+(ci.IPv6Address||'—')+''+(ci.MacAddress||'—')+''+(d.Id||'').substring(0,19)+''+escHtml((conf.Entrypoint||[]).join(' ')||'—')+''+escHtml((conf.Cmd||[]).join(' ')||'—')+''+escHtml(conf.WorkingDir||'/')+'| Variable | Value |
|---|---|
| '+escHtml(p[0])+' | '+escHtml(p.slice(1).join('='))+' |
Select a container.
Cleared.
'+escHtml(c.image||'')+''+escHtml(res.output||'')+''; if(typeof showToast==='function')showToast('Image built successfully','success'); setTimeout(refreshContainersLive,1500); } else { outEl.innerHTML='
'+escHtml(res.error||'Build failed')+''; } }).catch(function(e){ outEl.innerHTML='
| '+escHtml(h.trim())+' | ';}); html+=''+escHtml(c.trim())+' | '; }); html+=''; } html+='
|---|
'+escHtml(res.output||'Done')+''; if(typeof showToast==='function')showToast('Prune completed','success'); setTimeout(function(){loadDiskUsage();refreshContainersLive();},1500); } else { outEl.innerHTML='
'+escHtml(res.output||'(no output)')+''; } else { outEl.innerHTML+='
'+escHtml(res.error||'Execution failed')+''; } outEl.scrollTop=outEl.scrollHeight; }).catch(function(e){ var spinner=document.getElementById('execSpinner'); if(spinner)spinner.remove(); outEl.innerHTML+='
Error: '+escHtml(e.message)+''; }); } function quickExec(cid,cmd){ runExecCommand(cid,cmd); } /* ═══════════════════════════════════════════════════════════════ Container Processes (docker top) ═══════════════════════════════════════════════════════════════ */ function loadContainerProcesses(cid){ var el=document.getElementById('processesContent'); if(!el)return; el.innerHTML='
| '+escHtml(t)+' | ';}); html+='
|---|
| '+escHtml(v)+' | ';}); html+='