<rd-header> <rd-header-title title="Create container"></rd-header-title> <rd-header-content> <a ui-sref="containers">Containers</a> > Add container </rd-header-content> </rd-header> <div class="row"> <div class="col-lg-12 col-md-12 col-xs-12"> <rd-widget> <rd-widget-body> <form class="form-horizontal"> <!-- name-input --> <div class="form-group"> <label for="container_name" class="col-sm-1 control-label text-left">Name</label> <div class="col-sm-11"> <input type="text" class="form-control" ng-model="config.name" id="container_name" placeholder="e.g. myContainer"> </div> </div> <!-- !name-input --> <div class="col-sm-12 form-section-title"> Image configuration </div> <!-- image-and-registry --> <div class="form-group"> <por-image-registry image="config.Image" registry="formValues.Registry"></por-image-registry> </div> <!-- !image-and-registry --> <!-- always-pull --> <div class="form-group"> <div class="col-sm-12"> <label for="ownership" class="control-label text-left"> Always pull the image <portainer-tooltip position="bottom" message="When enabled, Portainer will automatically try to pull the specified image before creating the container."></portainer-tooltip> </label> <label class="switch" style="margin-left: 20px;"> <input type="checkbox" ng-model="formValues.alwaysPull"><i></i> </label> </div> </div> <!-- !always-pull --> <div class="col-sm-12 form-section-title"> Ports configuration </div> <!-- publish-exposed-ports --> <div class="form-group"> <div class="col-sm-12"> <label class="control-label text-left"> Publish all exposed ports <portainer-tooltip position="bottom" message="When enabled, Portainer will let Docker automatically map a random port on the host to each one defined in the image Dockerfile."></portainer-tooltip> </label> <label class="switch" style="margin-left: 20px;"> <input type="checkbox" ng-model="config.HostConfig.PublishAllPorts"><i></i> </label> </div> </div> <!-- !publish-exposed-ports --> <!-- port-mapping --> <div class="form-group"> <div class="col-sm-12"> <label class="control-label text-left">Port mapping</label> <span class="label label-default interactive" style="margin-left: 10px;" ng-click="addPortBinding()"> <i class="fa fa-plus-circle" aria-hidden="true"></i> map additional port </span> </div> <!-- port-mapping-input-list --> <div class="col-sm-12 form-inline" style="margin-top: 10px;"> <div ng-repeat="portBinding in config.HostConfig.PortBindings" style="margin-top: 2px;"> <!-- host-port --> <div class="input-group col-sm-4 input-group-sm"> <span class="input-group-addon">host</span> <input type="text" class="form-control" ng-model="portBinding.hostPort" placeholder="e.g. 80 or 1.2.3.4:80 (optional)"> </div> <!-- !host-port --> <span style="margin: 0 10px 0 10px;"> <i class="fa fa-long-arrow-right" aria-hidden="true"></i> </span> <!-- container-port --> <div class="input-group col-sm-4 input-group-sm"> <span class="input-group-addon">container</span> <input type="text" class="form-control" ng-model="portBinding.containerPort" placeholder="e.g. 80"> </div> <!-- !container-port --> <!-- protocol-actions --> <div class="input-group col-sm-3 input-group-sm"> <div class="btn-group btn-group-sm"> <label class="btn btn-primary" ng-model="portBinding.protocol" uib-btn-radio="'tcp'">TCP</label> <label class="btn btn-primary" ng-model="portBinding.protocol" uib-btn-radio="'udp'">UDP</label> </div> <button class="btn btn-sm btn-danger" type="button" ng-click="removePortBinding($index)"> <i class="fa fa-trash" aria-hidden="true"></i> </button> </div> <!-- !protocol-actions --> </div> </div> <!-- !port-mapping-input-list --> </div> <!-- !port-mapping --> <!-- access-control --> <por-access-control-form form-data="formValues.AccessControlData"></por-access-control-form> <!-- !access-control --> <!-- actions --> <div class="col-sm-12 form-section-title"> Actions </div> <div class="form-group"> <div class="col-sm-12"> <button type="button" class="btn btn-primary btn-sm" ng-disabled="!config.Image" ng-click="create()">Start container</button> <a type="button" class="btn btn-default btn-sm" ui-sref="containers">Cancel</a> <i id="createContainerSpinner" class="fa fa-cog fa-spin" style="margin-left: 5px; display: none;"></i> <span class="text-danger" ng-if="state.formValidationError" style="margin-left: 5px;">{{ state.formValidationError }}</span> </div> </div> <!-- !actions --> </form> </rd-widget-body> </rd-widget> </div> </div> <div class="row"> <div class="col-lg-12 col-md-12 col-xs-12"> <rd-widget> <rd-widget-header icon="fa-cog" title="Advanced container settings"></rd-widget-header> <rd-widget-body> <ul class="nav nav-pills nav-justified"> <li class="active interactive"><a data-target="#command" data-toggle="tab">Command</a></li> <li class="interactive"><a data-target="#volumes" data-toggle="tab">Volumes</a></li> <li class="interactive"><a data-target="#network" data-toggle="tab">Network</a></li> <li class="interactive"><a data-target="#env" data-toggle="tab">Env</a></li> <li class="interactive"><a data-target="#labels" data-toggle="tab">Labels</a></li> <li class="interactive"><a data-target="#restart-policy" data-toggle="tab">Restart policy</a></li> <li class="interactive"><a data-target="#runtime" data-toggle="tab">Runtime</a></li> </ul> <!-- tab-content --> <div class="tab-content"> <!-- tab-command --> <div class="tab-pane active" id="command"> <form class="form-horizontal" style="margin-top: 15px;"> <!-- command-input --> <div class="form-group"> <label for="container_command" class="col-sm-2 col-lg-1 control-label text-left">Command</label> <div class="col-sm-9"> <input type="text" class="form-control" ng-model="config.Cmd" id="container_command" placeholder="e.g. /usr/bin/nginx -t -c /mynginx.conf"> </div> </div> <!-- !command-input --> <!-- entrypoint-input --> <div class="form-group"> <label for="container_entrypoint" class="col-sm-2 col-lg-1 control-label text-left">Entry Point</label> <div class="col-sm-9"> <input type="text" class="form-control" ng-model="config.Entrypoint" id="container_entrypoint" placeholder="e.g. /bin/sh -c"> </div> </div> <!-- !entrypoint-input --> <!-- workdir-user-input --> <div class="form-group"> <label for="container_workingdir" class="col-sm-2 col-lg-1 control-label text-left">Working Dir</label> <div class="col-sm-4"> <input type="text" class="form-control" ng-model="config.WorkingDir" id="container_workingdir" placeholder="e.g. /myapp"> </div> <label for="container_user" class="col-sm-1 control-label text-left">User</label> <div class="col-sm-4"> <input type="text" class="form-control" ng-model="config.User" id="container_user" placeholder="e.g. nginx"> </div> </div> <!-- !workdir-user-input --> <!-- console --> <div class="form-group"> <label for="container_console" class="col-sm-2 col-lg-1 control-label text-left">Console</label> <div class="col-sm-10 col-lg-11"> <div class="col-sm-4"> <label class="radio-inline"> <input type="radio" name="container_console" ng-model="formValues.Console" value="both"> Interactive & TTY <span class="small text-muted">(-i -t)</span> </label> </div> <div class="col-sm-4"> <label class="radio-inline"> <input type="radio" name="container_console" ng-model="formValues.Console" value="interactive"> Interactive <span class="small text-muted">(-i)</span> </label> </div> </div> <div class="col-sm-offset-2 col-sm-10 col-lg-offset-1 col-lg-11"> <div class="col-sm-4"> <label class="radio-inline"> <input type="radio" name="container_console" ng-model="formValues.Console" value="tty"> TTY <span class="small text-muted">(-t)</span> </label> </div> <div class="col-sm-4"> <label class="radio-inline"> <input type="radio" name="container_console" ng-model="formValues.Console" value="none"> None </label> </div> </div> </div> <!-- !console --> </form> </div> <!-- !tab-command --> <!-- tab-volume --> <div class="tab-pane" id="volumes"> <form class="form-horizontal" style="margin-top: 15px;"> <!-- volumes --> <div class="form-group"> <div class="col-sm-12" style="margin-top: 5px;"> <label class="control-label text-left">Volume mapping</label> <span class="label label-default interactive" style="margin-left: 10px;" ng-click="addVolume()"> <i class="fa fa-plus-circle" aria-hidden="true"></i> map additional volume </span> </div> <!-- volumes-input-list --> <div class="form-inline" style="margin-top: 10px;"> <div ng-repeat="volume in formValues.Volumes"> <!-- volume-line1 --> <div class="col-sm-12 form-inline" style="margin-top: 10px;"> <!-- container-path --> <div class="input-group input-group-sm col-sm-6"> <span class="input-group-addon">container</span> <input type="text" class="form-control" ng-model="volume.containerPath" placeholder="e.g. /path/in/container"> </div> <!-- !container-path --> <!-- volume-type --> <div class="input-group col-sm-5" style="margin-left: 5px;"> <div class="btn-group btn-group-sm"> <label class="btn btn-primary" ng-model="volume.type" uib-btn-radio="'volume'" ng-click="volume.name = ''">Volume</label> <label class="btn btn-primary" ng-model="volume.type" uib-btn-radio="'bind'" ng-click="volume.name = ''">Bind</label> </div> <button class="btn btn-sm btn-danger" type="button" ng-click="removeVolume($index)"> <i class="fa fa-trash" aria-hidden="true"></i> </button> </div> <!-- !volume-type --> </div> <!-- !volume-line1 --> <!-- volume-line2 --> <div class="col-sm-12 form-inline" style="margin-top: 5px;"> <i class="fa fa-long-arrow-right" aria-hidden="true"></i> <!-- volume --> <div class="input-group input-group-sm col-sm-6" ng-if="volume.type === 'volume'"> <span class="input-group-addon">volume</span> <select class="form-control" ng-model="volume.name"> <option selected disabled hidden value="">Select a volume</option> <option ng-repeat="vol in availableVolumes" ng-value="vol.Name">{{ vol.Name|truncate:30}}</option> </select> </div> <!-- !volume --> <!-- bind --> <div class="input-group input-group-sm col-sm-6" ng-if="volume.type === 'bind'"> <span class="input-group-addon">host</span> <input type="text" class="form-control" ng-model="volume.name" placeholder="e.g. /path/on/host"> </div> <!-- !bind --> <!-- read-only --> <div class="input-group input-group-sm col-sm-5" style="margin-left: 5px;"> <div class="btn-group btn-group-sm"> <label class="btn btn-primary" ng-model="volume.readOnly" uib-btn-radio="false">Writable</label> <label class="btn btn-primary" ng-model="volume.readOnly" uib-btn-radio="true">Read-only</label> </div> </div> <!-- !read-only --> </div> <!-- !volume-line2 --> </div> </div> <!-- !volumes-input-list --> </div> </form> <!-- !volumes --> </div> <!-- !tab-volume --> <!-- tab-network --> <div class="tab-pane" id="network"> <form class="form-horizontal" style="margin-top: 15px;"> <div class="form-group" ng-if="globalNetworkCount === 0 && applicationState.endpoint.mode.provider !== 'DOCKER_SWARM_MODE'"> <div class="col-sm-12"> <span class="small text-muted">You don't have any shared network. Head over the <a ui-sref="networks">networks view</a> to create one.</span> </div> </div> <!-- network-input --> <div class="form-group"> <label for="container_network" class="col-sm-2 col-lg-1 control-label text-left">Network</label> <div class="col-sm-9"> <select class="form-control" ng-model="config.HostConfig.NetworkMode" id="container_network"> <option selected disabled hidden value="">Select a network</option> <option ng-repeat="net in availableNetworks" ng-value="net.Name">{{ net.Name }}</option> </select> </div> </div> <!-- !network-input --> <!-- container-name-input --> <div class="form-group" ng-if="config.HostConfig.NetworkMode == 'container'"> <label for="container_network_container" class="col-sm-2 col-lg-1 control-label text-left">Container</label> <div class="col-sm-9"> <select ng-if="applicationState.endpoint.mode.provider !== 'DOCKER_SWARM'" ng-options="container|containername for container in runningContainers" class="form-control" ng-model="formValues.NetworkContainer"> <option selected disabled hidden value="">Select a container</option> </select> <select ng-if="applicationState.endpoint.mode.provider === 'DOCKER_SWARM'" ng-options="container|swarmcontainername for container in runningContainers" class="form-control" ng-model="formValues.NetworkContainer"> <option selected disabled hidden value="">Select a container</option> </select> </div> </div> <!-- !container-name-input --> <!-- hostname-input --> <div class="form-group"> <label for="container_hostname" class="col-sm-2 col-lg-1 control-label text-left">Hostname</label> <div class="col-sm-9"> <input type="text" class="form-control" ng-model="config.Hostname" id="container_hostname" placeholder="e.g. web01"> </div> </div> <!-- !hostname-input --> <!-- domainname-input --> <div class="form-group"> <label for="container_domainname" class="col-sm-2 col-lg-1 control-label text-left">Domain Name</label> <div class="col-sm-9"> <input type="text" class="form-control" ng-model="config.Domainname" id="container_domainname" placeholder="e.g. example.com"> </div> </div> <!-- !domainname --> <!-- ipv4-input --> <div class="form-group"> <label for="container_ipv4" class="col-sm-2 col-lg-1 control-label text-left">IPv4 Address</label> <div class="col-sm-9"> <input type="text" class="form-control" ng-model="formValues.IPv4" id="container_ipv4" placeholder="e.g. 172.20.0.7"> </div> </div> <!-- !ipv4-input --> <!-- ipv6-input --> <div class="form-group"> <label for="container_ipv6" class="col-sm-2 col-lg-1 control-label text-left">IPv6 Address</label> <div class="col-sm-9"> <input type="text" class="form-control" ng-model="formValues.IPv6" id="container_ipv6" placeholder="e.g. a:b:c:d::1234"> </div> </div> <!-- !ipv6-input --> <!-- extra-hosts-variables --> <div class="form-group"> <div class="col-sm-12" style="margin-top: 5px;"> <label class="control-label text-left">Hosts file entries</label> <span class="label label-default interactive" style="margin-left: 10px;" ng-click="addExtraHost()"> <i class="fa fa-plus-circle" aria-hidden="true"></i> add additional entry </span> </div> <!-- extra-hosts-input-list --> <div class="col-sm-12 form-inline" style="margin-top: 10px;"> <div ng-repeat="variable in formValues.ExtraHosts" style="margin-top: 2px;"> <div class="input-group col-sm-5 input-group-sm"> <span class="input-group-addon">value</span> <input type="text" class="form-control" ng-model="variable.value" placeholder="e.g. host:IP"> </div> <button class="btn btn-sm btn-danger" type="button" ng-click="removeExtraHost($index)"> <i class="fa fa-trash" aria-hidden="true"></i> </button> </div> </div> <!-- !extra-hosts-input-list --> </div> <!-- !extra-hosts-variables --> </form> </div> <!-- !tab-network --> <!-- tab-labels --> <div class="tab-pane" id="labels"> <form class="form-horizontal" style="margin-top: 15px;"> <!-- labels --> <div class="form-group"> <div class="col-sm-12" style="margin-top: 5px;"> <label class="control-label text-left">Labels</label> <span class="label label-default interactive" style="margin-left: 10px;" ng-click="addLabel()"> <i class="fa fa-plus-circle" aria-hidden="true"></i> add label </span> </div> <!-- labels-input-list --> <div class="col-sm-12 form-inline" style="margin-top: 10px;"> <div ng-repeat="label in formValues.Labels" style="margin-top: 2px;"> <div class="input-group col-sm-5 input-group-sm"> <span class="input-group-addon">name</span> <input type="text" class="form-control" ng-model="label.name" placeholder="e.g. com.example.foo"> </div> <div class="input-group col-sm-5 input-group-sm"> <span class="input-group-addon">value</span> <input type="text" class="form-control" ng-model="label.value" placeholder="e.g. bar"> </div> <button class="btn btn-sm btn-danger" type="button" ng-click="removeLabel($index)"> <i class="fa fa-trash" aria-hidden="true"></i> </button> </div> </div> <!-- !labels-input-list --> </div> <!-- !labels--> </form> </div> <!-- !tab-labels --> <!-- tab-env --> <div class="tab-pane" id="env"> <form class="form-horizontal" style="margin-top: 15px;"> <!-- environment-variables --> <div class="form-group"> <div class="col-sm-12" style="margin-top: 5px;"> <label class="control-label text-left">Environment variables</label> <span class="label label-default interactive" style="margin-left: 10px;" ng-click="addEnvironmentVariable()"> <i class="fa fa-plus-circle" aria-hidden="true"></i> add environment variable </span> </div> <!-- environment-variable-input-list --> <div class="col-sm-12 form-inline" style="margin-top: 10px;"> <div ng-repeat="variable in config.Env" style="margin-top: 2px;"> <div class="input-group col-sm-5 input-group-sm"> <span class="input-group-addon">name</span> <input type="text" class="form-control" ng-model="variable.name" placeholder="e.g. FOO"> </div> <div class="input-group col-sm-5 input-group-sm"> <span class="input-group-addon">value</span> <input type="text" class="form-control" ng-model="variable.value" placeholder="e.g. bar"> </div> <button class="btn btn-sm btn-danger" type="button" ng-click="removeEnvironmentVariable($index)"> <i class="fa fa-trash" aria-hidden="true"></i> </button> </div> </div> <!-- !environment-variable-input-list --> </div> <!-- !environment-variables --> </form> </div> <!-- !tab-labels --> <!-- tab-restart-policy --> <div class="tab-pane" id="restart-policy"> <form class="form-horizontal" style="margin-top: 15px;"> <div class="form-group"> <div class="col-sm-12"> <label class="control-label text-left"> Restart policy </label> <div class="btn-group btn-group-sm" style="margin-left: 20px;"> <label class="btn btn-primary" ng-model="config.HostConfig.RestartPolicy.Name" uib-btn-radio="'no'"> Never </label> <label class="btn btn-primary" ng-model="config.HostConfig.RestartPolicy.Name" uib-btn-radio="'always'"> Always </label> <label class="btn btn-primary" ng-model="config.HostConfig.RestartPolicy.Name" uib-btn-radio="'on-failure'"> On failure </label> <label class="btn btn-primary" ng-model="config.HostConfig.RestartPolicy.Name" uib-btn-radio="'unless-stopped'"> Unless stopped </label> </div> </div> </div> </form> </div> <!-- !tab-restart-policy --> <!-- tab-runtime --> <div class="tab-pane" id="runtime"> <form class="form-horizontal" style="margin-top: 15px;"> <!-- privileged-mode --> <div class="form-group"> <div class="col-sm-12"> <label for="ownership" class="control-label text-left"> Privileged mode </label> <label class="switch" style="margin-left: 20px;"> <input type="checkbox" ng-model="config.HostConfig.Privileged"><i></i> </label> </div> </div> <!-- !privileged-mode --> </form> <form class="form-horizontal" style="margin-top: 15px;"> <!-- devices --> <div class="form-group"> <div class="col-sm-12" style="margin-top: 5px;"> <label class="control-label text-left">Devices</label> <span class="label label-default interactive" style="margin-left: 10px;" ng-click="addDevice()"> <i class="fa fa-plus-circle" aria-hidden="true"></i> add device </span> </div> <!-- devices-input-list --> <div class="col-sm-12 form-inline" style="margin-top: 10px;"> <div ng-repeat="device in config.HostConfig.Devices" style="margin-top: 2px;"> <div class="input-group col-sm-5 input-group-sm"> <span class="input-group-addon">host</span> <input type="text" class="form-control" ng-model="device.pathOnHost" placeholder="e.g. /dev/tty0"> </div> <div class="input-group col-sm-5 input-group-sm"> <span class="input-group-addon">container</span> <input type="text" class="form-control" ng-model="device.pathInContainer" placeholder="e.g. /dev/tty0"> </div> <button class="btn btn-sm btn-danger" type="button" ng-click="removeDevice($index)"> <i class="fa fa-trash" aria-hidden="true"></i> </button> </div> </div> <!-- !devices-input-list --> </div> <!-- !devices--> </form> </div> <!-- !tab-runtime --> </div> </rd-widget-body> </rd-widget> </div> </div>