2022-07-06 06:08:45 +00:00
< page-header title = "'Create service'" breadcrumbs = "[{label:'Services', link:'docker.services'}, 'Add service']" > < / page-header >
2016-09-23 04:54:58 +00:00
< div class = "row" >
< div class = "col-lg-12 col-md-12 col-xs-12" >
< rd-widget >
< rd-widget-body >
2017-11-20 13:34:14 +00:00
< form class = "form-horizontal" autocomplete = "off" >
2016-09-23 04:54:58 +00:00
<!-- name - input -->
< div class = "form-group" >
2022-08-12 04:47:44 +00:00
< label for = "service_name" class = "col-sm-2 control-label text-left" > Name< / label >
< div class = "col-sm-10" >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "formValues.Name" id = "service_name" placeholder = "e.g. myService" / >
2016-09-23 04:54:58 +00:00
< / div >
< / div >
<!-- !name - input -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-section-title" > Image configuration < / div >
2017-06-20 11:00:32 +00:00
<!-- image - and - registry -->
2021-03-24 18:27:32 +00:00
< por-image-registry
model="formValues.RegistryModel"
auto-complete="true"
label-class="col-sm-1"
input-class="col-sm-11"
endpoint="endpoint"
is-admin="isAdmin"
check-rate-limits="true"
set-validity="setPullImageValidity"
>
< / por-image-registry >
2017-06-20 11:00:32 +00:00
<!-- !image - and - registry -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-section-title" > Scheduling < / div >
2016-09-23 04:54:58 +00:00
<!-- scheduling - mode -->
< div class = "form-group" >
2017-03-27 12:44:39 +00:00
< div class = "col-sm-12" >
2022-01-17 05:53:32 +00:00
< label class = "control-label text-left" > Scheduling mode < / label >
< div class = "btn-group btn-group-sm" style = "margin-left: 20px" >
2022-07-26 23:18:06 +00:00
< label class = "btn btn-light" ng-model = "formValues.Mode" uib-btn-radio = "'global'" > Global< / label >
< label class = "btn btn-light" ng-model = "formValues.Mode" uib-btn-radio = "'replicated'" > Replicated< / label >
2017-03-27 12:44:39 +00:00
< / div >
2016-09-23 04:54:58 +00:00
< / div >
< / div >
2017-03-27 12:44:39 +00:00
< div class = "form-group form-inline" ng-if = "formValues.Mode === 'replicated'" >
< div class = "col-sm-12" >
2022-01-17 05:53:32 +00:00
< label class = "control-label text-left" > Replicas < / label >
< input type = "number" class = "form-control" ng-model = "formValues.Replicas" id = "replicas" placeholder = "e.g. 3" style = "margin-left: 20px" / >
2016-09-23 04:54:58 +00:00
< / div >
< / div >
<!-- !scheduling - mode -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-section-title" > Ports configuration < / div >
2016-09-23 04:54:58 +00:00
<!-- port - mapping -->
< div class = "form-group" >
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12" style = "margin-top: 5px" >
2017-03-27 12:44:39 +00:00
< label class = "control-label text-left" > Port mapping< / label >
2022-09-01 11:02:21 +00:00
< span class = "label label-default interactive vertical-center" style = "margin-left: 10px" ng-click = "addPortBinding()" >
2022-07-26 23:20:21 +00:00
< pr-icon icon = "'plus'" mode = "'alt'" feather = "true" > < / pr-icon > map additional port
2016-09-23 04:54:58 +00:00
< / span >
< / div >
2022-09-01 11:02:21 +00:00
< div class = "col-sm-12 form-inline mt-2" >
< div ng-repeat = "portBinding in formValues.Ports" class = "mt-1" >
2017-03-27 12:44:39 +00:00
<!-- host - port -->
2017-05-04 07:43:20 +00:00
< div class = "input-group col-sm-3 input-group-sm" >
2016-09-23 04:54:58 +00:00
< span class = "input-group-addon" > host< / span >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "portBinding.PublishedPort" placeholder = "e.g. 80 or 1.2.3.4:80 (optional)" / >
2016-09-23 04:54:58 +00:00
< / div >
2017-03-27 12:44:39 +00:00
<!-- !host - port -->
2022-01-17 05:53:32 +00:00
< span style = "margin: 0 10px 0 10px" >
2018-03-13 05:36:53 +00:00
< i class = "fa fa-long-arrow-alt-right" aria-hidden = "true" > < / i >
2017-03-27 12:44:39 +00:00
< / span >
<!-- container - port -->
2017-05-04 07:43:20 +00:00
< div class = "input-group col-sm-3 input-group-sm" >
2016-09-23 04:54:58 +00:00
< span class = "input-group-addon" > container< / span >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "portBinding.TargetPort" placeholder = "e.g. 80" / >
2016-09-23 04:54:58 +00:00
< / div >
2017-03-27 12:44:39 +00:00
<!-- !container - port -->
<!-- protocol - actions -->
2017-05-04 07:43:20 +00:00
< div class = "input-group col-sm-5 input-group-sm" >
2017-03-27 12:44:39 +00:00
< div class = "btn-group btn-group-sm" >
2022-07-26 23:18:06 +00:00
< label class = "btn btn-light" ng-model = "portBinding.Protocol" uib-btn-radio = "'tcp'" > TCP< / label >
< label class = "btn btn-light" ng-model = "portBinding.Protocol" uib-btn-radio = "'udp'" > UDP< / label >
2017-03-27 12:44:39 +00:00
< / div >
2017-05-04 07:43:20 +00:00
< div class = "btn-group btn-group-sm" >
2022-07-26 23:18:06 +00:00
< label class = "btn btn-light" ng-model = "portBinding.PublishMode" uib-btn-radio = "'ingress'" > Ingress< / label >
< label class = "btn btn-light" ng-model = "portBinding.PublishMode" uib-btn-radio = "'host'" > Host< / label >
2017-05-04 07:43:20 +00:00
< / div >
2022-09-01 11:02:21 +00:00
< button class = "btn btn-dangerlight" type = "button" ng-click = "removePortBinding($index)" >
< pr-icon icon = "'trash-2'" feather = "true" size = "'md'" > < / pr-icon >
2017-03-27 12:44:39 +00:00
< / button >
2016-09-23 04:54:58 +00:00
< / div >
2017-03-27 12:44:39 +00:00
<!-- !protocol - actions -->
2016-09-23 04:54:58 +00:00
< / div >
< / div >
<!-- !port - mapping - input - list -->
< / div >
<!-- !port - mapping -->
2018-09-03 10:08:03 +00:00
<!-- create - webhook -->
2022-01-27 00:38:29 +00:00
< div ng-if = "endpoint.Type !== 4 && isAdmin" >
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-section-title" > Webhooks < / div >
2021-02-24 22:08:22 +00:00
< div class = "form-group" >
< div class = "col-sm-12" >
2022-07-20 00:39:44 +00:00
< por-switch-field
label-class="'col-sm-2'"
checked="$ctrl.formValues.Webhook"
label="'Create a service webhook'"
on-change="(handleWebHookChange)"
tooltip="'Create a webhook (or callback URI) to automate the update of this service. Sending a POST request to this callback URI (without requiring any authentication) will pull the most up-to-date version of the associated image and re-deploy this service.'"
>< / por-switch-field >
2021-02-24 22:08:22 +00:00
< / div >
2018-09-03 10:08:03 +00:00
< / div >
< / div >
<!-- !create - webhook -->
2017-05-23 18:56:10 +00:00
<!-- access - control -->
2020-06-09 09:55:36 +00:00
< por-access-control-form form-data = "formValues.AccessControlData" > < / por-access-control-form >
2017-05-23 18:56:10 +00:00
<!-- !access - control -->
2017-03-27 12:44:39 +00:00
<!-- actions -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-section-title" > Actions < / div >
2017-03-27 12:44:39 +00:00
< div class = "form-group" >
< div class = "col-sm-12" >
2020-04-10 21:54:53 +00:00
< button
type="button"
class="btn btn-primary btn-sm"
2020-12-14 03:27:05 +00:00
ng-disabled="state.actionInProgress || !formValues.RegistryModel.Image || !volumesAreValid()"
2020-04-10 21:54:53 +00:00
ng-click="create()"
button-spinner="state.actionInProgress"
>
2017-11-12 21:39:12 +00:00
< span ng-hide = "state.actionInProgress" > Create the service< / span >
< span ng-show = "state.actionInProgress" > Creating service...< / span >
2017-11-12 19:27:28 +00:00
< / button >
2022-01-17 05:53:32 +00:00
< span class = "text-danger" ng-if = "state.formValidationError" style = "margin-left: 5px" > {{ state.formValidationError }}< / span >
2017-03-27 12:44:39 +00:00
< / div >
< / div >
<!-- !actions -->
2016-09-23 04:54:58 +00:00
< / 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-body >
2017-03-27 12:44:39 +00:00
< ul class = "nav nav-pills nav-justified" >
2017-12-22 09:05:31 +00:00
< li class = "active interactive" > < a data-target = "#command" data-toggle = "tab" > Command & Logging< / a > < / li >
2016-10-27 08:33:39 +00:00
< 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 >
2021-06-14 06:59:07 +00:00
< li class = "interactive" > < a data-target = "#env" data-toggle = "tab" > Env< / a > < / li >
2016-11-07 04:57:33 +00:00
< li class = "interactive" > < a data-target = "#labels" data-toggle = "tab" > Labels< / a > < / li >
2017-12-07 20:05:45 +00:00
< li class = "interactive" > < a data-target = "#update-config" data-toggle = "tab" > Update config & Restart< / a > < / li >
2017-07-24 09:59:09 +00:00
< li class = "interactive" ng-if = "applicationState.endpoint.apiVersion >= 1.25" > < a data-target = "#secrets" data-toggle = "tab" > Secrets< / a > < / li >
2020-04-10 21:54:53 +00:00
< li class = "interactive" > < a data-target = "#configs" data-toggle = "tab" ng-if = "applicationState.endpoint.apiVersion >= 1.3" > Configs< / a > < / li >
2017-09-20 06:32:19 +00:00
< li class = "interactive" > < a data-target = "#resources-placement" data-toggle = "tab" ng-click = "refreshSlider()" > Resources & Placement< / a > < / li >
2016-09-23 04:54:58 +00:00
< / ul >
<!-- tab - content -->
< div class = "tab-content" >
<!-- tab - command -->
< div class = "tab-pane active" id = "command" >
2022-01-17 05:53:32 +00:00
< form class = "form-horizontal" style = "margin-top: 15px" >
< div class = "col-sm-12 form-section-title" > Command < / div >
2016-09-23 04:54:58 +00:00
<!-- command - input -->
< div class = "form-group" >
2017-03-27 12:44:39 +00:00
< label for = "service_command" class = "col-sm-2 col-lg-1 control-label text-left" > Command< / label >
2016-09-23 04:54:58 +00:00
< div class = "col-sm-9" >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "formValues.Command" id = "service_command" placeholder = "e.g. /usr/bin/nginx -t -c /mynginx.conf" / >
2016-09-23 04:54:58 +00:00
< / div >
< / div >
<!-- !command - input -->
2016-12-25 09:14:26 +00:00
<!-- entrypoint - input -->
< div class = "form-group" >
2017-03-27 12:44:39 +00:00
< label for = "service_entrypoint" class = "col-sm-2 col-lg-1 control-label text-left" > Entrypoint< / label >
2016-12-25 09:14:26 +00:00
< div class = "col-sm-9" >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "formValues.EntryPoint" id = "service_entrypoint" placeholder = "e.g. /bin/sh -c" / >
2016-12-25 09:14:26 +00:00
< / div >
< / div >
<!-- !entrypoint - input -->
2016-09-23 04:54:58 +00:00
<!-- workdir - user - input -->
< div class = "form-group" >
2017-03-27 12:44:39 +00:00
< label for = "service_workingdir" class = "col-sm-2 col-lg-1 control-label text-left" > Working Dir< / label >
2016-09-23 04:54:58 +00:00
< div class = "col-sm-4" >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "formValues.WorkingDir" id = "service_workingdir" placeholder = "e.g. /myapp" / >
2016-09-23 04:54:58 +00:00
< / div >
< label for = "service_user" class = "col-sm-1 control-label text-left" > User< / label >
< div class = "col-sm-4" >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "formValues.User" id = "service_user" placeholder = "e.g. nginx" / >
2016-09-23 04:54:58 +00:00
< / div >
< / div >
<!-- !workdir - user - input -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-section-title" > Logging < / div >
2018-07-03 18:31:02 +00:00
<!-- logging - driver -->
2017-12-22 09:05:31 +00:00
< div class = "form-group" >
< label for = "log-driver" class = "col-sm-2 col-lg-1 control-label text-left" > Driver< / label >
< div class = "col-sm-4" >
< select class = "form-control" ng-model = "formValues.LogDriverName" id = "log-driver" >
2018-07-03 18:31:02 +00:00
< option selected value = "" > Default logging driver< / option >
2017-12-22 09:05:31 +00:00
< option ng-repeat = "driver in availableLoggingDrivers" ng-value = "driver" > {{ driver }}< / option >
< option value = "none" > none< / option >
< / select >
< / div >
< div class = "col-sm-5" >
< p class = "small text-muted" >
2020-04-10 21:54:53 +00:00
Logging driver for service that will override the default docker daemon driver. Select Default logging driver if you don't want to override it. Supported
logging drivers can be found
< a href = "https://docs.docker.com/engine/admin/logging/overview/#supported-logging-drivers" target = "_blank" > in the Docker documentation< / a > .
2017-12-22 09:05:31 +00:00
< / p >
< / div >
< / div >
<!-- !logging - driver -->
<!-- logging - opts -->
< div class = "form-group" >
2022-09-01 11:02:21 +00:00
< div class = "col-sm-12 mt-1" >
2017-12-22 09:05:31 +00:00
< label class = "control-label text-left" >
Options
2020-04-10 21:54:53 +00:00
< portainer-tooltip
2022-07-03 23:21:25 +00:00
position="'top'"
message="'Add button is disabled unless a driver other than none or default is selected. Options are specific to the selected driver, refer to the driver documentation.'"
2020-04-10 21:54:53 +00:00
>< / portainer-tooltip >
2017-12-22 09:05:31 +00:00
< / label >
2020-04-10 21:54:53 +00:00
< span
2022-09-01 11:02:21 +00:00
class="label label-default interactive vertical-center"
2022-01-17 05:53:32 +00:00
style="margin-left: 10px"
2020-04-10 21:54:53 +00:00
ng-click="!formValues.LogDriverName || formValues.LogDriverName === 'none' || addLogDriverOpt(formValues.LogDriverName)"
>
2022-07-26 23:20:21 +00:00
< pr-icon icon = "'plus'" mode = "'alt'" feather = "true" > < / pr-icon > add logging driver option
2017-12-22 09:05:31 +00:00
< / span >
< / div >
<!-- logging - opts - input - list -->
2022-09-01 11:02:21 +00:00
< div class = "col-sm-12 form-inline mt-2" >
< div ng-repeat = "opt in formValues.LogDriverOpts" class = "mt-1" >
2017-12-22 09:05:31 +00:00
< div class = "input-group col-sm-5 input-group-sm" >
< span class = "input-group-addon" > option< / span >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "opt.name" placeholder = "e.g. FOO" / >
2017-12-22 09:05:31 +00:00
< / div >
< div class = "input-group col-sm-5 input-group-sm" >
< span class = "input-group-addon" > value< / span >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "opt.value" placeholder = "e.g. bar" / >
2017-12-22 09:05:31 +00:00
< / div >
2022-09-01 11:02:21 +00:00
< button class = "btn btn-dangerlight" type = "button" ng-click = "removeLogDriverOpt($index)" >
< pr-icon icon = "'trash-2'" feather = "true" size = "'md'" > < / pr-icon >
2017-12-22 09:05:31 +00:00
< / button >
< / div >
< / div >
<!-- logging - opts - input - list -->
2018-07-03 18:31:02 +00:00
< / div >
2017-12-22 09:05:31 +00:00
<!-- !logging - opts -->
2016-09-23 04:54:58 +00:00
< / form >
< / div >
<!-- !tab - command -->
<!-- tab - volume -->
< div class = "tab-pane" id = "volumes" >
2022-01-17 05:53:32 +00:00
< form class = "form-horizontal" style = "margin-top: 15px" >
2016-09-23 04:54:58 +00:00
<!-- volumes -->
< div class = "form-group" >
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12" style = "margin-top: 5px" >
2017-03-27 12:44:39 +00:00
< label class = "control-label text-left" > Volume mapping< / label >
2022-01-17 05:53:32 +00:00
< span class = "label label-default interactive" style = "margin-left: 10px" ng-click = "addVolume()" >
2022-07-26 23:20:21 +00:00
< pr-icon icon = "'plus'" mode = "'alt'" feather = "true" > < / pr-icon > map additional volume
2016-09-23 04:54:58 +00:00
< / span >
< / div >
<!-- volumes - input - list -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-inline" style = "margin-top: 10px" >
2017-03-27 12:44:39 +00:00
< div ng-repeat = "volume in formValues.Volumes" >
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12" style = "margin-top: 10px" >
2017-03-27 12:44:39 +00:00
<!-- volume - line1 -->
< div class = "col-sm-12 form-inline" >
<!-- container - path -->
2020-12-14 03:27:05 +00:00
< div class = "input-group col-sm-6" >
< div class = "input-group input-group-sm w-full" >
< span class = "input-group-addon" > container< / span >
< input type = "text" class = "form-control" ng-model = "volume.Target" placeholder = "e.g. /path/in/container" / >
< / div >
2022-08-12 04:47:44 +00:00
< div class = "small text-warning" ng-show = "!volume.Target" >
< pr-icon icon = "'alert-triangle'" mode = "'warning'" feather = "true" > < / pr-icon > Target is required.
< / div >
2017-03-27 12:44:39 +00:00
< / div >
<!-- !container - path -->
<!-- volume - type -->
2022-01-17 05:53:32 +00:00
< div class = "input-group col-sm-5" style = "margin-left: 5px; vertical-align: top" >
2020-07-29 09:10:46 +00:00
< div class = "btn-group btn-group-sm" ng-if = "allowBindMounts" >
2022-07-26 23:18:06 +00:00
< label class = "btn btn-light" ng-model = "volume.Type" uib-btn-radio = "'volume'" ng-click = "volume.Source = null" > Volume< / label >
< label class = "btn btn-light" ng-model = "volume.Type" uib-btn-radio = "'bind'" ng-click = "volume.Source = null" > Bind< / label >
2017-03-27 12:44:39 +00:00
< / div >
2022-09-01 11:02:21 +00:00
< button class = "btn btn-dangerlight" type = "button" ng-click = "removeVolume($index)" >
< pr-icon icon = "'trash-2'" feather = "true" size = "'md'" > < / pr-icon >
2017-03-27 12:44:39 +00:00
< / button >
< / div >
<!-- !volume - type -->
2016-09-23 04:54:58 +00:00
< / div >
2017-03-27 12:44:39 +00:00
<!-- !volume - line1 -->
<!-- volume - line2 -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-inline" style = "margin-top: 5px" >
< div style = "height: 30px; display: inline-block; vertical-align: top; display: inline-flex; align-items: center" >
2020-12-14 03:27:05 +00:00
< i class = "fa fa-long-arrow-alt-right" aria-hidden = "true" > < / i >
< / div >
2017-03-27 12:44:39 +00:00
<!-- volume -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-6 input-group" ng-if = "volume.Type === 'volume'" style = "float: none; padding: 0" >
2020-12-14 03:27:05 +00:00
< div class = "input-group input-group-sm w-full" >
< span class = "input-group-addon" > volume< / span >
< select
class="form-control"
ng-model="volume.Source"
ng-options="vol as ((vol.Id|truncate:30) + ' - ' + (vol.Driver|truncate:30)) for vol in availableVolumes"
>
2021-01-20 11:02:22 +00:00
< option selected disabled value = "" > Select a volume< / option >
2020-12-14 03:27:05 +00:00
< / select >
< / div >
2022-08-12 04:47:44 +00:00
< div class = "small text-warning" ng-show = "!volume.Source" >
< pr-icon icon = "'alert-triangle'" mode = "'warning'" feather = "true" > < / pr-icon > Source is required.
< / div >
2017-03-27 12:44:39 +00:00
< / div >
<!-- !volume -->
<!-- bind -->
< div class = "input-group input-group-sm col-sm-6" ng-if = "volume.Type === 'bind'" >
2020-12-14 03:27:05 +00:00
< div class = "input-group input-group-sm w-full" >
< span class = "input-group-addon" > host< / span >
< input type = "text" class = "form-control" ng-model = "volume.Source" placeholder = "e.g. /path/on/host" / >
< / div >
2022-08-12 04:47:44 +00:00
< div class = "small text-warning" ng-show = "!volume.Source" >
< pr-icon icon = "'alert-triangle'" mode = "'warning'" feather = "true" > < / pr-icon > Source is required.
< / div >
2017-03-27 12:44:39 +00:00
< / div >
<!-- !bind -->
<!-- read - only -->
2022-01-17 05:53:32 +00:00
< div class = "input-group input-group-sm col-sm-5" style = "margin-left: 5px; vertical-align: top" >
2017-03-27 12:44:39 +00:00
< div class = "btn-group btn-group-sm" >
2022-07-26 23:18:06 +00:00
< label class = "btn btn-light" ng-model = "volume.ReadOnly" uib-btn-radio = "false" > Writable< / label >
< label class = "btn btn-light" ng-model = "volume.ReadOnly" uib-btn-radio = "true" > Read-only< / label >
2017-03-27 12:44:39 +00:00
< / div >
< / div >
<!-- !read - only -->
< / div >
<!-- !volume - line2 -->
2016-09-23 04:54:58 +00:00
< / div >
< / div >
< / div >
<!-- !volumes - input - list -->
< / div >
<!-- !volumes -->
< / form >
< / div >
<!-- !tab - volume -->
<!-- tab - network -->
< div class = "tab-pane" id = "network" >
2022-01-17 05:53:32 +00:00
< form class = "form-horizontal" style = "margin-top: 15px" >
2016-09-23 04:54:58 +00:00
<!-- network - input -->
< div class = "form-group" >
2017-03-27 12:44:39 +00:00
< label for = "container_network" class = "col-sm-2 col-lg-1 control-label text-left" > Network< / label >
2016-09-23 04:54:58 +00:00
< div class = "col-sm-9" >
2016-12-25 20:34:02 +00:00
< select class = "form-control" ng-model = "formValues.Network" >
2016-09-23 04:54:58 +00:00
< option selected disabled hidden value = "" > Select a network< / option >
2018-10-03 23:04:38 +00:00
< option ng-repeat = "net in availableNetworks | orderBy: 'Name'" ng-value = "net.Name" > {{ net.Name }}< / option >
2016-09-23 04:54:58 +00:00
< / select >
< / div >
< div class = "col-sm-2" > < / div >
< / div >
<!-- !network - input -->
<!-- extra - networks -->
< div class = "form-group" >
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12" style = "margin-top: 5px" >
2017-03-27 12:44:39 +00:00
< label class = "control-label text-left" > Extra networks< / label >
2022-01-17 05:53:32 +00:00
< span class = "label label-default interactive" style = "margin-left: 10px" ng-click = "addExtraNetwork()" >
2022-07-26 23:20:21 +00:00
< pr-icon icon = "'plus'" mode = "'alt'" feather = "true" > < / pr-icon > add extra network
2016-09-23 04:54:58 +00:00
< / span >
< / div >
<!-- network - input - list -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-inline" style = "margin-top: 10px" >
< div ng-repeat = "network in formValues.ExtraNetworks" style = "margin-top: 2px" >
2017-03-27 12:44:39 +00:00
< select class = "form-control" ng-model = "network.Name" >
< option selected disabled hidden value = "" > Select a network< / option >
< option ng-repeat = "net in availableNetworks" ng-value = "net.Name" > {{ net.Name }}< / option >
< / select >
2022-09-01 11:02:21 +00:00
< button class = "btn btn-dangerlight" type = "button" ng-click = "removeExtraNetwork($index)" >
< pr-icon icon = "'trash-2'" feather = "true" size = "'md'" > < / pr-icon >
2017-03-27 12:44:39 +00:00
< / button >
2016-09-23 04:54:58 +00:00
< / div >
< / div >
<!-- !network - input - list -->
< / div >
<!-- !extra - networks -->
2017-12-21 08:53:34 +00:00
<!-- extra - hosts - variables -->
< div class = "form-group" ng-if = "applicationState.endpoint.apiVersion >= 1.25" >
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12" style = "margin-top: 5px" >
2017-12-21 08:53:34 +00:00
< label class = "control-label text-left" > Hosts file entries< / label >
2022-01-17 05:53:32 +00:00
< span class = "label label-default interactive" style = "margin-left: 10px" ng-click = "addHostsEntry()" >
2022-07-26 23:20:21 +00:00
< pr-icon icon = "'plus'" mode = "'alt'" feather = "true" > < / pr-icon > add additional entry
2017-12-21 08:53:34 +00:00
< / span >
< / div >
<!-- hosts - input - list -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-inline" style = "margin-top: 10px" >
< div ng-repeat = "variable in formValues.HostsEntries" style = "margin-top: 2px" >
2017-12-21 08:53:34 +00:00
< div class = "input-group col-sm-5 input-group-sm" >
< span class = "input-group-addon" > value< / span >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "variable.value" placeholder = "e.g. host:IP" / >
2017-12-21 08:53:34 +00:00
< / div >
2022-09-01 11:02:21 +00:00
< button class = "btn btn-dangerlight" type = "button" ng-click = "removeHostsEntry($index)" >
< pr-icon icon = "'trash-2'" feather = "true" size = "'md'" > < / pr-icon >
2017-12-21 08:53:34 +00:00
< / button >
< / div >
< / div >
<!-- !hosts - input - list -->
< / div >
<!-- !extra - hosts - variables -->
2016-09-23 04:54:58 +00:00
< / form >
< / div >
<!-- !tab - network -->
2021-06-14 06:59:07 +00:00
<!-- tab - env -->
< div class = "tab-pane" id = "env" >
< environment-variables-panel
ng-model="formValues.Env"
explanation="These values will be applied to the service when created"
on-change="(handleEnvVarChange)"
>< / environment-variables-panel >
< / div >
<!-- !tab - env -->
2016-11-07 04:57:33 +00:00
<!-- tab - labels -->
< div class = "tab-pane" id = "labels" >
2022-01-17 05:53:32 +00:00
< form class = "form-horizontal" style = "margin-top: 15px" >
2016-11-07 04:57:33 +00:00
<!-- labels -->
< div class = "form-group" >
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12" style = "margin-top: 5px" >
2017-03-27 12:44:39 +00:00
< label class = "control-label text-left" > Service labels< / label >
2022-01-17 05:53:32 +00:00
< span class = "label label-default interactive" style = "margin-left: 10px" ng-click = "addLabel()" >
2022-07-26 23:20:21 +00:00
< pr-icon icon = "'plus'" mode = "'alt'" feather = "true" > < / pr-icon > add service label
2016-11-07 04:57:33 +00:00
< / span >
< / div >
<!-- labels - input - list -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-inline" style = "margin-top: 10px" >
< div ng-repeat = "label in formValues.Labels" style = "margin-top: 2px" >
2016-11-07 04:57:33 +00:00
< div class = "input-group col-sm-5 input-group-sm" >
< span class = "input-group-addon" > name< / span >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "label.key" placeholder = "e.g. com.example.foo" / >
2016-11-07 04:57:33 +00:00
< / div >
< div class = "input-group col-sm-5 input-group-sm" >
< span class = "input-group-addon" > value< / span >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "label.value" placeholder = "e.g. bar" / >
2016-11-07 04:57:33 +00:00
< / div >
2022-09-01 11:02:21 +00:00
< button class = "btn btn-dangerlight" type = "button" ng-click = "removeLabel($index)" >
< pr-icon icon = "'trash-2'" feather = "true" size = "'md'" > < / pr-icon >
2017-03-27 12:44:39 +00:00
< / button >
2016-11-07 04:57:33 +00:00
< / div >
< / div >
<!-- !labels - input - list -->
< / div >
<!-- !labels -->
2016-11-25 06:21:06 +00:00
<!-- container - labels -->
< div class = "form-group" >
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12" style = "margin-top: 5px" >
2017-03-27 12:44:39 +00:00
< label class = "control-label text-left" > Container labels< / label >
2022-01-17 05:53:32 +00:00
< span class = "label label-default interactive" style = "margin-left: 10px" ng-click = "addContainerLabel()" >
2022-07-26 23:20:21 +00:00
< pr-icon icon = "'plus'" mode = "'alt'" feather = "true" > < / pr-icon > add container label
2016-11-25 06:21:06 +00:00
< / span >
< / div >
<!-- container - labels - input - list -->
2022-01-17 05:53:32 +00:00
< div class = "col-sm-12 form-inline" style = "margin-top: 10px" >
< div ng-repeat = "label in formValues.ContainerLabels" style = "margin-top: 2px" >
2016-11-25 06:21:06 +00:00
< div class = "input-group col-sm-5 input-group-sm" >
< span class = "input-group-addon" > name< / span >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "label.key" placeholder = "e.g. com.example.foo" / >
2016-11-25 06:21:06 +00:00
< / div >
< div class = "input-group col-sm-5 input-group-sm" >
< span class = "input-group-addon" > value< / span >
2020-04-10 21:54:53 +00:00
< input type = "text" class = "form-control" ng-model = "label.value" placeholder = "e.g. bar" / >
2016-11-25 06:21:06 +00:00
< / div >
2022-09-01 11:02:21 +00:00
< button class = "btn btn-dangerlight" type = "button" ng-click = "removeContainerLabel($index)" >
< pr-icon icon = "'trash-2'" feather = "true" size = "'md'" > < / pr-icon >
2017-03-27 12:44:39 +00:00
< / button >
2016-11-25 06:21:06 +00:00
< / div >
< / div >
<!-- !container - labels - input - list -->
< / div >
<!-- !container - labels -->
2016-11-07 04:57:33 +00:00
< / form >
< / div >
<!-- !tab - labels -->
2016-12-25 20:31:22 +00:00
<!-- tab - update - config -->
2018-02-01 12:27:52 +00:00
< div class = "tab-pane" id = "update-config" ng-include = "'app/docker/views/services/create/includes/update-restart.html'" > < / div >
2016-12-25 20:31:22 +00:00
<!-- !tab - update - config -->
2017-05-27 07:23:49 +00:00
<!-- tab - secrets -->
2018-02-01 12:27:52 +00:00
< div class = "tab-pane" id = "secrets" ng-if = "applicationState.endpoint.apiVersion >= 1.25" ng-include = "'app/docker/views/services/create/includes/secret.html'" > < / div >
2017-05-27 07:23:49 +00:00
<!-- !tab - secrets -->
2017-11-06 08:47:31 +00:00
<!-- tab - configs -->
2020-04-10 21:54:53 +00:00
< div class = "tab-pane" id = "configs" ng-if = "applicationState.endpoint.apiVersion >= 1.3" ng-include = "'app/docker/views/services/create/includes/config.html'" > < / div >
2017-11-06 08:47:31 +00:00
<!-- !tab - configs -->
2017-09-20 06:32:19 +00:00
<!-- tab - resources - placement -->
2018-02-01 12:27:52 +00:00
< div class = "tab-pane" id = "resources-placement" ng-include = "'app/docker/views/services/create/includes/resources-placement.html'" > < / div >
2017-09-20 06:32:19 +00:00
<!-- !tab - resources - placement -->
2016-09-23 04:54:58 +00:00
< / div >
< / rd-widget-body >
< / rd-widget >
< / div >
< / div >