mirror of https://github.com/portainer/portainer
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
451 lines
32 KiB
451 lines
32 KiB
<div id="create-modal" class="modal fade">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
|
<h3>Create And Start Container From Image</h3>
|
|
</div>
|
|
<div class="modal-body">
|
|
<form role="form">
|
|
<accordion close-others="true">
|
|
<accordion-group heading="Container options" is-open="menuStatus.containerOpen">
|
|
<fieldset>
|
|
<div class="row">
|
|
<div class="col-xs-6">
|
|
<div class="form-group">
|
|
<label>Cmd:</label>
|
|
<input type="text" placeholder='["/bin/echo", "Hello world"]'
|
|
ng-model="config.Cmd" class="form-control"/>
|
|
<small>Input commands as a raw string or JSON array</small>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Entrypoint:</label>
|
|
<input type="text" ng-model="config.Entrypoint" class="form-control"
|
|
placeholder="./entrypoint.sh"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Name:</label>
|
|
<input type="text" ng-model="config.name" class="form-control"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Hostname:</label>
|
|
<input type="text" ng-model="config.Hostname" class="form-control"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Domainname:</label>
|
|
<input type="text" ng-model="config.Domainname" class="form-control"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>User:</label>
|
|
<input type="text" ng-model="config.User" class="form-control"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Memory:</label>
|
|
<input type="number" ng-model="config.Memory" class="form-control"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Volumes:</label>
|
|
|
|
<div ng-repeat="volume in config.Volumes">
|
|
<div class="form-group form-inline">
|
|
<input type="text" ng-model="volume.name" class="form-control"
|
|
placeholder="/var/data"/>
|
|
<button type="button" class="btn btn-danger btn-sm"
|
|
ng-click="rmEntry(config.Volumes, volume)">Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.Volumes, {name: ''})">Add Volume
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="col-xs-6">
|
|
<div class="form-group">
|
|
<label>MemorySwap:</label>
|
|
<input type="number" ng-model="config.MemorySwap" class="form-control"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>CpuShares:</label>
|
|
<input type="number" ng-model="config.CpuShares" class="form-control"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Cpuset:</label>
|
|
<input type="text" ng-model="config.Cpuset" class="form-control"
|
|
placeholder="1,2"/>
|
|
<small>Input as comma-separated list of numbers</small>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>WorkingDir:</label>
|
|
<input type="text" ng-model="config.WorkingDir" class="form-control"
|
|
placeholder="/app"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>MacAddress:</label>
|
|
<input type="text" ng-model="config.MacAddress" class="form-control"
|
|
placeholder="12:34:56:78:9a:bc"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="networkDisabled">NetworkDisabled:</label>
|
|
<input id="networkDisabled" type="checkbox"
|
|
ng-model="config.NetworkDisabled"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="tty">Tty:</label>
|
|
<input id="tty" type="checkbox" ng-model="config.Tty"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="openStdin">OpenStdin:</label>
|
|
<input id="openStdin" type="checkbox" ng-model="config.OpenStdin"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="stdinOnce">StdinOnce:</label>
|
|
<input id="stdinOnce" type="checkbox" ng-model="config.StdinOnce"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>SecurityOpts:</label>
|
|
|
|
<div ng-repeat="opt in config.SecurityOpts">
|
|
<div class="form-group form-inline">
|
|
<input type="text" ng-model="opt.name" class="form-control"
|
|
placeholder="label:type:svirt_apache"/>
|
|
<button type="button" class="btn btn-danger btn-sm"
|
|
ng-click="rmEntry(config.SecurityOpts, opt)">Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.SecurityOpts, {name: ''})">Add Option
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<hr>
|
|
<div class="form-group">
|
|
<label>Env:</label>
|
|
|
|
<div ng-repeat="envar in config.Env">
|
|
<div class="form-group form-inline">
|
|
<div class="form-group">
|
|
<label class="sr-only">Variable Name:</label>
|
|
<input type="text" ng-model="envar.name" class="form-control"
|
|
placeholder="NAME"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="sr-only">Variable Value:</label>
|
|
<input type="text" ng-model="envar.value" class="form-control"
|
|
placeholder="value"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<button class="btn btn-danger btn-xs form-control"
|
|
ng-click="rmEntry(config.Env, envar)">Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.Env, {name: '', value: ''})">Add environment
|
|
variable
|
|
</button>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Labels:</label>
|
|
|
|
<div ng-repeat="label in config.Labels">
|
|
<div class="form-group form-inline">
|
|
<div class="form-group">
|
|
<label class="sr-only">Key:</label>
|
|
<input type="text" ng-model="label.key" class="form-control"
|
|
placeholder="key"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="sr-only">Value:</label>
|
|
<input type="text" ng-model="label.value" class="form-control"
|
|
placeholder="value"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<button class="btn btn-danger btn-xs form-control"
|
|
ng-click="rmEntry(config.Labels, label)">Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.Labels, {key: '', value: ''})">Add Label
|
|
</button>
|
|
</div>
|
|
</fieldset>
|
|
</accordion-group>
|
|
<accordion-group heading="HostConfig options" is-open="menuStatus.hostConfigOpen">
|
|
<fieldset>
|
|
<div class="row">
|
|
<div class="col-xs-6">
|
|
<div class="form-group">
|
|
<label>Binds:</label>
|
|
|
|
<div ng-repeat="bind in config.HostConfig.Binds">
|
|
<div class="form-group form-inline">
|
|
<input type="text" ng-model="bind.name" class="form-control"
|
|
placeholder="/host:/container"/>
|
|
<button type="button" class="btn btn-danger btn-sm"
|
|
ng-click="rmEntry(config.HostConfig.Binds, bind)">Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.HostConfig.Binds, {name: ''})">Add Bind
|
|
</button>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Links:</label>
|
|
|
|
<div ng-repeat="link in config.HostConfig.Links">
|
|
<div class="form-group form-inline">
|
|
<input type="text" ng-model="link.name" class="form-control"
|
|
placeholder="web:db">
|
|
<button type="button" class="btn btn-danger btn-sm"
|
|
ng-click="rmEntry(config.HostConfig.Links, link)">Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.HostConfig.Links, {name: ''})">Add Link
|
|
</button>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Dns:</label>
|
|
|
|
<div ng-repeat="entry in config.HostConfig.Dns">
|
|
<div class="form-group form-inline">
|
|
<input type="text" ng-model="entry.name" class="form-control"
|
|
placeholder="8.8.8.8"/>
|
|
<button type="button" class="btn btn-danger btn-sm"
|
|
ng-click="rmEntry(config.HostConfig.Dns, entry)">Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.HostConfig.Dns, {name: ''})">Add entry
|
|
</button>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>DnsSearch:</label>
|
|
|
|
<div ng-repeat="entry in config.HostConfig.DnsSearch">
|
|
<div class="form-group form-inline">
|
|
<input type="text" ng-model="entry.name" class="form-control"
|
|
placeholder="example.com"/>
|
|
<button type="button" class="btn btn-danger btn-sm"
|
|
ng-click="rmEntry(config.HostConfig.DnsSearch, entry)">
|
|
Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.HostConfig.DnsSearch, {name: ''})">Add
|
|
entry
|
|
</button>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>CapAdd:</label>
|
|
|
|
<div ng-repeat="entry in config.HostConfig.CapAdd">
|
|
<div class="form-group form-inline">
|
|
<input type="text" ng-model="entry.name" class="form-control"
|
|
placeholder="cap_sys_admin"/>
|
|
<button type="button" class="btn btn-danger btn-sm"
|
|
ng-click="rmEntry(config.HostConfig.CapAdd, entry)">Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.HostConfig.CapAdd, {name: ''})">Add entry
|
|
</button>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>CapDrop:</label>
|
|
|
|
<div ng-repeat="entry in config.HostConfig.CapDrop">
|
|
<div class="form-group form-inline">
|
|
<input type="text" ng-model="entry.name" class="form-control"
|
|
placeholder="cap_sys_admin"/>
|
|
<button type="button" class="btn btn-danger btn-sm"
|
|
ng-click="rmEntry(config.HostConfig.CapDrop, entry)">Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.HostConfig.CapDrop, {name: ''})">Add entry
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="col-xs-6">
|
|
<div class="form-group">
|
|
<label>NetworkMode:</label>
|
|
<input type="text" ng-model="config.HostConfig.NetworkMode"
|
|
class="form-control" placeholder="bridge"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="publishAllPorts">PublishAllPorts:</label>
|
|
<input id="publishAllPorts" type="checkbox"
|
|
ng-model="config.HostConfig.PublishAllPorts"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="privileged">Privileged:</label>
|
|
<input id="privileged" type="checkbox"
|
|
ng-model="config.HostConfig.Privileged"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>VolumesFrom:</label>
|
|
|
|
<div ng-repeat="volume in config.HostConfig.VolumesFrom">
|
|
<div class="form-group form-inline">
|
|
<select ng-model="volume.name"
|
|
ng-options="name for name in containerNames track by name"
|
|
class="form-control">
|
|
</select>
|
|
<button class="btn btn-danger btn-xs form-control"
|
|
ng-click="rmEntry(config.HostConfig.VolumesFrom, volume)">
|
|
Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.HostConfig.VolumesFrom, {name: ''})">Add
|
|
volume
|
|
</button>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label>RestartPolicy:</label>
|
|
<select ng-model="config.HostConfig.RestartPolicy.name">
|
|
<option value="">disabled</option>
|
|
<option value="always">always</option>
|
|
<option value="on-failure">on-failure</option>
|
|
</select>
|
|
<label>MaximumRetryCount:</label>
|
|
<input type="number"
|
|
ng-model="config.HostConfig.RestartPolicy.MaximumRetryCount"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<hr>
|
|
<div class="form-group">
|
|
<label>ExtraHosts:</label>
|
|
|
|
<div ng-repeat="entry in config.HostConfig.ExtraHosts">
|
|
<div class="form-group form-inline">
|
|
<div class="form-group">
|
|
<label class="sr-only">Hostname:</label>
|
|
<input type="text" ng-model="entry.host" class="form-control"
|
|
placeholder="hostname"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="sr-only">IP Address:</label>
|
|
<input type="text" ng-model="entry.ip" class="form-control"
|
|
placeholder="127.0.0.1"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<button class="btn btn-danger btn-xs form-control"
|
|
ng-click="rmEntry(config.HostConfig.ExtraHosts, entry)">Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.HostConfig.ExtraHosts, {host: '', ip: ''})">Add
|
|
extra host
|
|
</button>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>LxcConf:</label>
|
|
|
|
<div ng-repeat="entry in config.HostConfig.LxcConf">
|
|
<div class="form-group form-inline">
|
|
<div class="form-group">
|
|
<label class="sr-only">Name:</label>
|
|
<input type="text" ng-model="entry.name" class="form-control"
|
|
placeholder="lxc.utsname"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<label class="sr-only">Value:</label>
|
|
<input type="text" ng-model="entry.value" class="form-control"
|
|
placeholder="docker"/>
|
|
</div>
|
|
<div class="form-group">
|
|
<button class="btn btn-danger btn-xs form-control"
|
|
ng-click="rmEntry(config.HostConfig.LxcConf, entry)">Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.HostConfig.LxcConf, {name: '', value: ''})">Add
|
|
Entry
|
|
</button>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Devices:</label>
|
|
|
|
<div ng-repeat="device in config.HostConfig.Devices">
|
|
<div class="form-group form-inline inline-four">
|
|
<label class="sr-only">PathOnHost:</label>
|
|
<input type="text" ng-model="device.PathOnHost" class="form-control"
|
|
placeholder="PathOnHost"/>
|
|
<label class="sr-only">PathInContainer:</label>
|
|
<input type="text" ng-model="device.PathInContainer" class="form-control"
|
|
placeholder="PathInContainer"/>
|
|
<label class="sr-only">CgroupPermissions:</label>
|
|
<input type="text" ng-model="device.CgroupPermissions" class="form-control"
|
|
placeholder="CgroupPermissions"/>
|
|
<button class="btn btn-danger btn-xs form-control"
|
|
ng-click="rmEntry(config.HostConfig.Devices, device)">Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.HostConfig.Devices, { PathOnHost: '', PathInContainer: '', CgroupPermissions: ''})">
|
|
Add Device
|
|
</button>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>PortBindings:</label>
|
|
|
|
<div ng-repeat="portBinding in config.HostConfig.PortBindings">
|
|
<div class="form-group form-inline inline-four">
|
|
<label class="sr-only">Host IP:</label>
|
|
<input type="text" ng-model="portBinding.ip" class="form-control"
|
|
placeholder="Host IP Address"/>
|
|
<label class="sr-only">Host Port:</label>
|
|
<input type="text" ng-model="portBinding.extPort" class="form-control"
|
|
placeholder="Host Port"/>
|
|
<label class="sr-only">Container port:</label>
|
|
<input type="text" ng-model="portBinding.intPort" class="form-control"
|
|
placeholder="Container Port"/>
|
|
<select ng-model="portBinding.protocol">
|
|
<option value="">tcp</option>
|
|
<option value="udp">udp</option>
|
|
</select>
|
|
<button class="btn btn-danger btn-xs form-control"
|
|
ng-click="rmEntry(config.HostConfig.PortBindings, portBinding)">
|
|
Remove
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<button type="button" class="btn btn-success btn-sm"
|
|
ng-click="addEntry(config.HostConfig.PortBindings, {ip: '', extPort: '', intPort: ''})">
|
|
Add Port Binding
|
|
</button>
|
|
</div>
|
|
</fieldset>
|
|
</accordion-group>
|
|
</accordion>
|
|
</form>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<a href="" class="btn btn-primary btn-lg" ng-click="create()">Create</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|