GithubHelp home page GithubHelp logo

codeabovelab / haven-platform Goto Github PK

View Code? Open in Web Editor NEW
276.0 22.0 42.0 4.52 MB

Haven is an open source Docker container management system. It integrates container, application, cluster, image, and registry management in one single place.

License: Apache License 2.0

Java 93.51% HTML 0.26% Shell 0.01% JavaScript 5.07% CSS 1.15%
docker swarm swarm-mode orchestration registries cluster-manager compose image-management services docker-ui

haven-platform's Introduction

Build Status codebeat badge docker hub

Haven: Container Management Simplified

Introduction

Haven is a Docker cluster management system. The user controls the entire platform via user-friendly yet powerful UI and commandline tools. Built on top of Docker, Swarm, and Compose, it offers multiple clusters and image registries management.

Copyright 2017 Code Above Lab Inc

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Index

For additional technical detail, see:

Feature Overview

Haven features the following capabilities:

Dashboard

The dashboard gives an overview of the status of the cluster and any containers or nodes that are using excessive resources. dashboard

Cluster Management

In the Cluster module, the user can manage the nodes and the containers, and view any errors the in the cluster event log. clusters

Container Management

In the Containers module, the user can manage all of the active containers and their status. The user can also view logs, moreover, configurations of each container. containers

Node Status

In the Node module, the user can see all nodes in the system and their detailed info. nodes

Image Management

In the Image Management module, the user can see all of the images downloaded onto each cluster and which nodes the image resides on. Users can remove old images to save disk space. images

Registry Management

Private and public Registries can be configured on the system to let the user easily select the desired image for downloading without having to remember which registry it is on. registries

Jobs

Unattended jobs can be scheduled and results are available for auditing purposes. jobs Each cluster can have its set of jobs to update specific images. update

Delegated Admin

Users can be assigned administrative rights to specific clusters to avoid admin bottleneck. users

Additional Features

  1. Creating/deleting tags and ability to set filters for clusters based on the tags. Use case would be creating workflow: only images which were tested at QA should be visible on the prod cluster.

  2. Storing containers configuration in VCS per cluster, see https://github.com/codeabovelab/haven-example-container-configuration

  3. Additional policies/constraints for Swarm.

  4. Group operations such as cleaning space, upgrade/rollback containers. For example, use cases are:

    a. checking/updating all containers from specified repository every five minutes for test cluster
    
    b. one-time update specified list of containers (which use common API, etc).
    
    c. or just click update all in this cluster
    
  5. Backups of system configuration

  6. Network management: api

  7. Events: api

  8. API api

haven-platform's People

Contributors

interair avatar mchwang avatar qivan avatar wayerr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

haven-platform's Issues

error while creating container

Create container: nginx of nginx:1.13.1 in cluster1
Creating container with params: ContainerSource(super=EditableContainerSource(cpuShares=null, cpuQuota=null, blkioWeight=null, cpuPeriod=null, cpusetCpus=null, cpusetMems=null, restart=null, memoryLimit=null, memorySwap=null, memoryReservation=null, kernelMemory=null), id=null, image=nginx:1.13.1, imageId=null, cluster=cluster1, node=slave1, application=null, environment=[], include=[], volumes=[], volumeBinds=[], volumeDriver=null, volumesFrom=[], mounts=[], name=nginx, hostname=null, domainname=null, ports={}, labels={}, reschedule=null, publishAllPorts=false, links={}, command=[], entrypoint=[], dns=[], dnsSearch=[], network=null, networks=[], extraHosts=[], securityOpt=[])
{"message":null,"code":"ERROR"}

nodes is holded after delete its cluster

Steps to reproduce:

  • delete cluster with nodes
  • try to create new cluster (important do not reload page) with nodes of deleted cluster

workaround: reload page after cluster deleting

NodeStorage: node registration

Currently we use 'name-address' pair for adding new node. In storage, we use node name by key.

  1. The name is specified by user at registration, but in standalone swarm, it is retrieved from the host name. When the user specify the wrong name, it cause can look like the nodes are invalid in the system.

  2. Swarm-mode does not use node name for identity and uses different address (port) for managing node via encrypted RPC.

So following changes must be made:

  • Check that the user specified name is the same as the host name
  • Rewrite system to use independent node IDs (like currently but fix the behavior of the stadalone-Swarm)

Support for secret API

Docker provides a secret API: https://docs.docker.com/engine/api/v1.25/#tag/Secret (in api from 1.25)
doc: https://docs.docker.com/engine/swarm/secrets/

In terms of Docker Swarm services, a secret is a blob of data, such as a password, SSH private key, SSL certificate, or another piece of data that should not be transmitted over a network or stored unencrypted in a Dockerfile or in your application’s source code. In Docker 1.13 and higher, you can use Docker secrets to centrally manage this data and securely transmit it to only those containers that need access to it. Secrets are encrypted during transit and at rest in a Docker swarm. A given secret is only accessible to those services which have been granted explicit access to it, and only while those service tasks are running.

We need to provide support in Haven.

ConfigsFetcherGitTest is broken

On run from IDE:

16:31:52.497 [main] ERROR c.c.d.c.c.c.DefaultParser - 
org.springframework.validation.BindException: org.springframework.boot.bind.RelaxedDataBinder$RelaxedBeanPropertyBindingResult: 1 errors
Field error in object 'target' on field 'memoryLimit': rejected value [1g]; codes [typeMismatch.target.memoryLimit,typeMismatch.memoryLimit,typeMismatch.java.lang.Long,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [target.memoryLimit,memoryLimit]; arguments []; default message [memoryLimit]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Long' for property 'memoryLimit'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [@com.codeabovelab.dm.common.json.JtMemory java.lang.Long]]
	at org.springframework.boot.bind.PropertiesConfigurationFactory.checkForBindingErrors(PropertiesConfigurationFactory.java:358)
	at org.springframework.boot.bind.PropertiesConfigurationFactory.doBindPropertiesToTarget(PropertiesConfigurationFactory.java:275)
	at org.springframework.boot.bind.PropertiesConfigurationFactory.bindPropertiesToTarget(PropertiesConfigurationFactory.java:240)
	at com.codeabovelab.dm.cluman.configs.container.DefaultParser.parse(DefaultParser.java:55)
	at com.codeabovelab.dm.cluman.configs.container.DefaultParser.parse(DefaultParser.java:96)
	at com.codeabovelab.dm.cluman.configs.container.DefaultParser.parse(DefaultParser.java:40)
	at com.codeabovelab.dm.cluman.configs.container.ConfigsFetcherGit.lambda$resolveProperties$0(ConfigsFetcherGit.java:82)
	at java.util.Collections$SingletonList.forEach(Collections.java:4822)
	at com.codeabovelab.dm.cluman.configs.container.ConfigsFetcherGit.resolveProperties(ConfigsFetcherGit.java:76)
	at com.codeabovelab.dm.cluman.configs.container.ConfigProviderImpl.resolveProperties(ConfigProviderImpl.java:54)
	at com.codeabovelab.dm.cluman.configs.container.ConfigsFetcherGitTest.testResolveProperties(ConfigsFetcherGitTest.java:31)

On run from shell:

java.lang.AssertionError: null
        at org.junit.Assert.fail(Assert.java:86)
        at org.junit.Assert.assertTrue(Assert.java:41)
        at org.junit.Assert.assertNotNull(Assert.java:712)
        at org.junit.Assert.assertNotNull(Assert.java:722)
        at com.codeabovelab.dm.cluman.configs.container.ConfigsFetcherGitTest.testResolveProperties(ConfigsFetcherGitTest.java:37)

So, we have test that have different behavior in ide and shell, that is not good.

agent container with proxy docker.sock to secured http

At commit d8a7fe0 i start develop of agent module, which must do:

  • proxy /var/run/docker.sock to node http port (8771) with optional encryption

It need because current way to expose docker api has issuess:

  • docker does not provide way to secure its api (we may use tlsverify, but it complicates configuration)
  • some users has difficulties with configuration of docker

Developing of agent achieve us a deploying node by single command like

docker run -v /var/run/docker.sock:/var/run/docker.sock cluman-agent cluman-master-node.local

Hide exception from RegistrySearchHelper.search on BadRequest result

18:46:15.264 [http-nio-8761-exec-8] WARN  c.c.d.c.c.r.RegistrySearchHelper - Search "тп" on  will ended with error, see log
18:46:15.490 [http-nio-8761-exec-10] ERROR c.c.d.c.c.r.AbstractV2RegistryService - Error from server: Response from server: 400 Bad request
org.springframework.web.client.HttpClientErrorException: 400 Bad request
	at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
	at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700)
	at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:653)
	at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:628)
	at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:303)
	at com.codeabovelab.dm.cluman.cluster.registry.PublicDockerHubRegistryImpl.search(PublicDockerHubRegistryImpl.java:56)
	at com.codeabovelab.dm.cluman.cluster.registry.RegistrySearchHelper.search(RegistrySearchHelper.java:63)
	at com.codeabovelab.dm.cluman.cluster.registry.RegistryRepository.search(RegistryRepository.java:305)
	at com.codeabovelab.dm.cluman.ui.ImagesApi.search(ImagesApi.java:168)
	at com.codeabovelab.dm.cluman.ui.ImagesApi$$FastClassBySpringCGLIB$$55a0f747.invoke(<generated>)

Improve docker events fetch

Current implementation use scheduledThreadExecutor which configured on fixed thread count, and can not allocate new thread for node. This work incorrect - when node count great than pool size - it can not subscribe to all nodes.

Behavior of data table in application pages are inconsistent

On some pages, the entire section of the page is not rendered until the the data is loaded. On other pages, most of the pages are rendered except for the data that are still being returned from server. The behavior should be consolidated to be the latter where most of the pages are rendered to give user a better experience.

Also if there are no data in a data table, some tables are empty while others show a friendly message. We should always show a friendly message.

mousio.etcd4j hangs

"main@1" prio=5 tid=0x1 nid=NA waiting
  java.lang.Thread.State: WAITING
	  at java.lang.Object.wait(Object.java:-1)
	  at java.lang.Object.wait(Object.java:502)
	  at io.netty.util.concurrent.DefaultPromise.awaitUninterruptibly(DefaultPromise.java:261)
	  at mousio.client.promises.ResponsePromise.waitForPromiseSuccess(ResponsePromise.java:189)
	  at mousio.etcd4j.promises.EtcdResponsePromise.get(EtcdResponsePromise.java:58)
	  at mousio.etcd4j.promises.EtcdResponsePromise.get(EtcdResponsePromise.java:59)
...below strings repeated many times....
	  at mousio.etcd4j.promises.EtcdResponsePromise.get(EtcdResponsePromise.java:59)
	  at mousio.etcd4j.promises.EtcdResponsePromise.get(EtcdResponsePromise.java:59)
	  at com.codeabovelab.dm.cluman.ds.kv.etcd.EtcdClientWrapper.set(EtcdClientWrapper.java:155)
	  at com.codeabovelab.dm.common.kv.mapping.NodeMapping.save(NodeMapping.java:84)
	  at com.codeabovelab.dm.common.kv.mapping.KvClassMapper.save(KvClassMapper.java:115)
	  at com.codeabovelab.dm.common.kv.mapping.KvMap$ValueHolder.flush(KvMap.java:172)
	  at com.codeabovelab.dm.common.kv.mapping.KvMap.flush(KvMap.java:461)
	  at com.codeabovelab.dm.cluman.ds.clusters.AbstractNodesGroup.flush(AbstractNodesGroup.java:136)
	  at com.codeabovelab.dm.cluman.ds.clusters.AbstractNodesGroup.updateAcl(AbstractNodesGroup.java:245)
	  at com.codeabovelab.dm.cluman.ds.clusters.DiscoveryStorageImpl.init(DiscoveryStorageImpl.java:142)

Investigation shows that promise losing response from server and hang on wait it

NodeStorage sometimes reject event tasks

17:43:31.259 [node-docker-exp2-log-fetcher-0] ERROR c.c.d.c.d.n.NodeRegistrationImpl - can not convert DockerEvent(...)
java.util.concurrent.RejectedExecutionException: Task com.codeabovelab.dm.cluman.ds.nodes.NodeStorage$$Lambda$209/1971446779@6a1cf67a rejected from java.util.concurrent.ThreadPoolExecutor@1f4dd016[Running, pool size = 2, active threads = 1, queued tasks = 10, completed tasks = 3]
	at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2047)
	at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:823)
	at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1369)
	at com.codeabovelab.dm.cluman.ds.nodes.NodeStorage.acceptDockerLogEvent(NodeStorage.java:389)
	at com.codeabovelab.dm.cluman.ds.nodes.NodeRegistrationImpl.proxyDockerEvent(NodeRegistrationImpl.java:272)

haven-agent.py fatal error

I am use ubuntu server 16.04
start haven-agent.py

console log:

2017-03-02 00:38:06,459 - INFO - Configs: /etc/haven-agent.ini
Arguments: {'timeout': 10, 'log_level': 2, 'docker': '$SELF_IP:2375', 'secret': None, 'master': '$MASTER_IP:8761'}
2017-03-02 00:38:06,460 - WARNING - Run as daemon
2017-03-02 00:38:06,493 - ERROR - Cannot connect to Docker {'data': None, 'method': 'GET', 'docker': '$SELF_IP:2375', 'path': '/info'} due to error: [Errno -2] Name or service not known
2017-03-02 00:38:06,494 - ERROR - Cannot update registration due to [Errno -2] Name or service not known
Traceback (most recent call last):
File "/usr/bin/haven-agent.py", line 167, in update
info = docker.info()
File "/usr/bin/haven-agent.py", line 83, in info
return copy.deepcopy(self.__info.get())
File "/usr/bin/haven-agent.py", line 38, in get
self.__data = self.__loader(*args, **kwargs)
File "/usr/bin/haven-agent.py", line 50, in
self.__info = CachedValue(loader=lambda: self.__send("/info"),
File "/usr/bin/haven-agent.py", line 64, in __send
self.conn.request(method, path)
File "/usr/lib/python3.5/http/client.py", line 1106, in request
self._send_request(method, url, body, headers)
File "/usr/lib/python3.5/http/client.py", line 1151, in _send_request
self.endheaders(body)
File "/usr/lib/python3.5/http/client.py", line 1102, in endheaders
self._send_output(message_body)
File "/usr/lib/python3.5/http/client.py", line 934, in _send_output
self.send(msg)
File "/usr/lib/python3.5/http/client.py", line 877, in send
self.connect()
File "/usr/lib/python3.5/http/client.py", line 849, in connect
(self.host,self.port), self.timeout, self.source_address)
File "/usr/lib/python3.5/socket.py", line 693, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "/usr/lib/python3.5/socket.py", line 732, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known
^CTraceback (most recent call last):
File "/usr/bin/haven-agent.py", line 449, in
main()
File "/usr/bin/haven-agent.py", line 445, in main
time.sleep(bs.timeout)

help me pls

Simplify upgrading agent

Currently agent uses self signed key pair for ssl, this made upgrading rather difficult. Default installation should be as simple as it possible

Manage cluster networks

Currently we automatically create network per cluster.
We need API for creating custom networks (bridge, overlay, etc.), list existed networks in UI (API exists)

DockerService define caches mutable data & publish docker DTO

Below and some other methods that need to be refactored:

  • it must return immutable data
  • result must be independent from docker api
...
    @Cacheable(CACHE_CONTAINER_DETAILS)
    @DefineCache(expireAfterWrite = 30_000L, invalidator = DockerCacheInvalidator.class)
    ContainerDetails getContainer(String id);


    CreateContainerResponse createContainer(CreateContainerCmd cmd);


    @Cacheable(value = "Image", key = "name")
    @DefineCache(expireAfterWrite = Integer.MAX_VALUE)
    ImageDescriptor pullImage(String name, Consumer<ProcessEvent> watcher);

ImagesApi.getDeployedImages fail when container use 'nginx@sha256:xx' image name

16:02:04.010 [http-nio-8761-exec-3] ERROR c.c.d.c.c.r.AbstractV2RegistryService - Can't fetch tags for nginx@sha256 from HubRegistryConfig()
org.springframework.web.client.HttpClientErrorException: 404 Not Found
	at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:91)
	at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700)
	at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:653)
	at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:628)
	at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:303)
	at com.codeabovelab.dm.cluman.cluster.registry.AbstractV2RegistryService.getTags(AbstractV2RegistryService.java:158)
	at com.codeabovelab.dm.cluman.cluster.registry.PublicDockerHubRegistryImpl.getTags(PublicDockerHubRegistryImpl.java:36)
	at com.codeabovelab.dm.cluman.ui.ImagesApi.loadImageTagsIfNeed(ImagesApi.java:118)
	at com.codeabovelab.dm.cluman.ui.ImagesApi.getDeployedImages(ImagesApi.java:91)

Add ability to clone an existing container

I would like to be able to "clone" an existing container but be able to modify the different attributes such as env. variables, volume settings, tags, etc before starting.

improve 'add node' UI

add input filed for node IP, and generate command like:

wget --content-disposition "http://$MASTER_IP:8761/discovery/agent/haven-agent.py?node=$SELF_IP:2375"
 chmod +x haven-agent.py

where $SELF_IP - the node ip

Swarm support

Hello , what you mean under "Swarm support"?
Does it needs to install agents on each swarm node, or you have already implemented mechanism to manage swarm cluster via swarm master node (i mean docker swarm usage , not swarm mode)?

reset admin password

I reup haven:

  1. stop and rm haven container
  2. stop and rm etcd0 container
  3. delete data dirs
  4. up etcd0 and haven conteiners
    But i canot login with admin/password
    what am I doing wrong?

Container module returns 500 error

When trying to view all of the containers via the Container module page, it fails to render and notice a 500 error from the API call with the following error stack:

java.lang.NullPointerException at com.codeabovelab.dm.cluman.utils.ContainerUtils.isOurContainer(ContainerUtils.java:182) at com.codeabovelab.dm.cluman.ui.UiUtils.resolveContainerLock(UiUtils.java:141) at com.codeabovelab.dm.cluman.ui.model.UiContainer.fromBase(UiContainer.java:108) at com.codeabovelab.dm.cluman.ui.model.UiContainer.from(UiContainer.java:85) at com.codeabovelab.dm.cluman.ui.model.UiContainer.from(UiContainer.java:81) at com.codeabovelab.dm.cluman.ui.ClusterApi.listContainers(ClusterApi.java:154) at com.codeabovelab.dm.cluman.ui.ClusterApi$$FastClassBySpringCGLIB$$c1cc239b.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:652) at com.codeabovelab.dm.cluman.ui.ClusterApi$$EnhancerBySpringCGLIB$$14383160.listContainers(<generated>) at sun.reflect.GeneratedMethodAccessor428.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:108) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) at com.codeabovelab.dm.cluman.security.AccessContextFilter.doFilter(AccessContextFilter.java:40) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) at

Improve "Get agent page"

Replace "Get Agent" input to command text:

docker run --name agent -d --restart=unless-stopped -p 8771:8771 -v /run/docker.sock:/run/docker.sock codeabovelab/agent:1.2.1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.