• Stars
    star
    245
  • Rank 165,304 (Top 4 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created almost 7 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Connect your containers via a web-tty

Container web TTY

Go Report Card Master Build Status GoDoc license Docker Pulls MicroBadger Size GitHub release Github All Releases

中文

Tired of typing docker ps | grep xxx && docker exec -ti xxxx sh ? Try me!

Although I like terminal, I still want a better tool to get into the containers to do some debugging or checking. So I build this container-web-tty. It can help you get into the container and execute commands via a web-tty, based on yudai/gotty with some changes.

Both docker and kubectl are supported.

Usage

Of cause you can run it by downloading the binary, but thare are some Copy-and-Paste ways.

Using docker

You can start container-web-tty inside a container by mounting docker.sock:

docker run -dti --restart always --name container-web-tty \
    -p 8080:8080 \
    -v /var/run/docker.sock:/var/run/docker.sock \
    wrfly/container-web-tty

# tail logs
docker logs -f container-web-tty

Using kubernetes

Or you can mount the kubernetes config file:

docker run -dti --restart always --name container-web-tty \
    -p 8080:8080 \
    -e WEB_TTY_BACKEND=kube \
    -e WEB_TTY_KUBE_CONFIG=/kube.config \
    -v ~/.kube/config:/kube.config \
    wrfly/container-web-tty

Using local <-> remote (gRPC)

You can deploy container-web-tty in remote servers, and connect to it via a local container-web-tty. They use gRPC for communication.

This is useful when you cannot get the remote servers or there are more than one server that you need to connect to.

Remote

Host 192.168.66.1 and 192.168.66.2 both running:

docker run -dti --restart always --name container-web-tty \
    -p 8080:8080 \
    -p 8090:8090 \
    -e WEB_TTY_GRPC_PORT=8090 \
    -e WEB_TTY_GRPC_AUTH=96ssW0rd \
    -v /var/run/docker.sock:/var/run/docker.sock \
    wrfly/container-web-tty

Notes:

  • You can disable the HTTP server by setting WEB_TTY_PORT=-1
  • The WEB_TTY_GRPC_AUTH must be the same between all hosts

Local

docker run -dti --restart always --name container-web-tty \
    -p 8080:8080 \
    -e WEB_TTY_BACKEND=grpc \
    -e WEB_TTY_GRPC_AUTH=96ssW0rd \
    -e WEB_TTY_GRPC_SERVERS=192.168.66.1:8090,192.168.66.2:8090 \
    wrfly/container-web-tty

Now you will see all the containers of all the servers via http://localhost:8080

Keyboard Shortcuts (Linux)

  • Cut the word before the cursor Ctrl+w => You cannot do it for now (I'll working on it for Ctrl+Backspace, but I know little about js)
  • Copy: Ctrl+Shift+c => Ctrl+Insert
  • Paste: Ctrl+Shift+v => Shift+Insert

Features

  • it works
  • docker backend
  • kubectl backend
  • beautiful index
  • support docker ps options
  • start|stop|restart container(docker backend only)
  • proxy mode (client -> server's containers)
  • auth(only in proxy mode)
  • TTY timeout (idle timeout)
  • history audit (just cat the history logs after enable this feature)
  • real time sharing (like screen sharing)
  • container logs (click the container name)
  • exec arguments (append an extra "?cmd=xxx" argument in URL)
  • connect to gRPC servers via HTTP/Socks5 proxy

Audit exec history and container outputs

docker run -dti --restart always --name container-web-tty \
    -p 8080:8080 \
    -e WEB_TTY_AUDIT=true \
    -v `pwd`/container-audit:/audit \
    -v /var/run/docker.sock:/var/run/docker.sock \
    wrfly/container-web-tty

After you exec some commands, you will see the inputs and outputs under the container-audit directory, you can use cat or tail -f to see the changes.

Real-time sharing

You can always share the container's inputs and outputs with others via the exec link, just share the /exec/<exec-ID> to them!

Collaborate

docker run -dti --restart always --name container-web-tty \
    -p 8080:8080 \
    -e WEB_TTY_COLLABORATE=true \
    -v /var/run/docker.sock:/var/run/docker.sock \
    wrfly/container-web-tty

By enabling this feature, once you exec into the container, you can share your process with others, that means anyone got the shareable link would type the command to the tty you are working on. You can edit the same file, type the same code, in the same TTY! Just share the exec link to your friend!

Options

GLOBAL OPTIONS:
   --addr value                 server binding address (default: "0.0.0.0")
   --audit-dir value            container audit log dir path (default: "audit")
   --backend value, -b value    backend type, 'docker' or 'kube' or 'grpc'(remote) (default: "docker")
   --control-all, --ctl-a       enable container control (default: false)
   --control-restart, --ctl-r   enable container restart (default: false)
   --control-start, --ctl-s     enable container start   (default: false)
   --control-stop, --ctl-t      enable container stop    (default: false)
   --debug, -d                  debug mode (log-level=debug enable pprof) (default: false)
   --docker-host value          docker host path (default: "/var/run/docker.sock")
   --docker-ps value            docker ps options
   --enable-audit, --audit      enable audit the container outputs (default: false)
   --enable-collaborate, --clb  collaborate on the same TTY process (default: false)
   --grpc-auth value            grpc auth token (default: "password")
   --grpc-port value            grpc server port, -1 for disable the grpc server (default: -1)
   --grpc-proxy value           grpc proxy address, in the format of http://127.0.0.1:8080 or socks5://127.0.0.1:1080
   --grpc-servers value         upstream servers, for proxy mode(grpc address and port), use comma for split
   --help, -h                   show help (default: false)
   --idle-time value            time out of an idle connection
   --kube-config value          kube config path (default: "/home/mr/.kube/config")
   --port value, -p value       HTTP server port, -1 for disable the HTTP server (default: 8080)
   --version, -v                print the version (default: false)

Show-off

List the containers on your machine:

list

It will execute /bin/sh if there is no /bin/bash inside the container:

/bin/bash:

Run custom command:

Get container logs:

logs

More Repositories

1

gus-proxy

"打一枪换一个地方" 一个HTTP代理
Go
177
star
2

bash_aliases

A project to collect useful bash aliases.
Shell
30
star
3

captcha_verify

简单验证码识别
Python
28
star
4

k8s-install.sh

k8s国内安装脚本: 不整那么复杂, 复制-粘贴-敲回车就好了.
Shell
24
star
5

yasuser

Yet another self-hosted URL shortener. | 短域名
Go
22
star
6

just-a-bot

WON'T follow any github users
Go
19
star
7

web-dns

Query DNS via HTTP Get
Go
18
star
8

et

Email tracker, give you a notification when someone opens your email.
Go
16
star
9

grpc-echo

Simple gRPC echo example
Go
9
star
10

shadowbroker-auto

running fb script
Python
8
star
11

micro-docker

一些Docker File, 基于alpine的微容器
PHP
8
star
12

gua

simple Golang command-line parser, if you don't need some fancy features, just guá it.
Go
8
star
13

hovers

http proxy over socks5 proxy
Go
6
star
14

check

check multiple errors/functions
Go
5
star
15

pubsub

golang memory pub-sub library
Go
3
star
16

simorse

Send mos code (USR1 and USR2) to communicate with the program
Go
3
star
17

dockerfiles

some dockerfiles
Dockerfile
2
star
18

10pic

10张内涵图
HTML
2
star
19

check-port-open-in-x-ways

Yeah, check port open in x ways.
JavaScript
2
star
20

xyv6

校园V6
CSS
2
star
21

ecp

environment config parser | fill up the struct through the way you like
Go
2
star
22

bindata

Conver regular files into a single golang package
Go
2
star
23

golang-template

golang project template
Go
2
star
24

dockerPractice

练手的Dockerfile和一些docker-compose.yml
Shell
2
star
25

reglib

docker registry lib
Go
1
star
26

bedis

builtin redis - bedis
Go
1
star
27

piu

pull images up to date
Go
1
star
28

auto_install_vsftpd_in_ubuntu

A simple shell to install vsftpd in Ubuntu.
Shell
1
star
29

bash-games

Shell
1
star
30

love-u.me

love-u
CSS
1
star
31

ssh-goburp

ssh 爆破
Go
1
star