docker启动gitlab,Docker 命令与映射修改,VNC Timed out waiting for a response from the computer

ps:我用的是本地自己搭建的私有仓库,所以下载镜像为本地地址,如果自己没有本地仓库的可以去官方下载,官方也是有这个镜像的,pull之前可以先docker search gitlab查看一下gitlab的一个镜像

下载镜像:

docker pull 192.168.0.153:5000/gitlab

创建持久化目录:

mkdir -p /home/dockerdata/gitlab/config

mkdir -p /home/dockerdata/gitlab/logs

mkdir -p /home/dockerdata/gitlab/data

容器内Gitlab使用端口:

Ssh 22

http 80

https 443

映射到宿主机端口:

Ssh 1022

http 8010

https:8443

注意:如果要使用宿主机的22和443端口,需要修改宿主机的ssh和https的默认端口。例如修改ssh端口为1022

  Ubuntu 下没启用 seLinux ,如果启用了需要先 

  apt install policycoreutils-python-utils

  apt install firewalld

  否则不需要。

semanage port -a -t ssh_port_t -p tcp 1022

firewall-cmd --permanent --add-port=1022/tcp

firewall-cmd --reload

运行gitlab镜像:

docker run -d -h gitlab -p 1022:22 -p 8010:80 -p 8443:443 \

   -v /home/dockerdata/gitlab/config:/etc/gitlab \

   -v /home/dockerdata/gitlab/logs:/var/log/gitlab \

   -v /home/dockerdata/gitlab/data:/var/opt/gitlab \

   --restart always --name mygitlab gitlab/gitlab-ce:latest

官方的脚本:

sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

 

容器中的gitlab完全启动需要一定时间,可通过日志命令实时查看启动进度:

$ docker logs -f <container id>

启动完全完成之后访问http://<ip>:8010

 

可以先查看一下端口占用情况:

1.netstat  -anp  |grep   端口号

2.netstat   -nultp(此处不用加端口号)

3.netstat  -anp  |grep  82查看82端口的使用情况;

修改运行中的docker容器的端口映射

  在docker run创建并运行容器的时候,可以通过-p指定端口映射规则。但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改。当docker start运行容器后并没有提供一个-p选项或设置,让你修改指定端口映射规则。那么这种情况我们该怎么处理呢?今天Docker君教你如何修改运行中的docker容器的端口映射?

方法一:删除原有容器,重新建新容器

这个解决方案最为简单,把原来的容器删掉,重新建一个。当然这次不要忘记加上端口映射。

    优缺点:优点是简单快捷,在测试环境使用较多。缺点是如果是数据库镜像,那重新建一个又要重新配置一次,就比较麻烦了。

方法二:修改容器配置文件,重启docker服务

容器的配置文件路径:

  1. /var/lib/docker/containers/[hash_of_the_container]/hostconfig.json

    其中的hashofthecontainer是docker镜像的hash值,可以通过docker ps或者docker inspect containername查看。(CONTAINER ID就可以看出来)

 

    如上图,文件中其中有一项是PortBindings,其中8080/tcp对应的是容器内部的8080端口,HostPort对应的是映射到宿主机的端口9190。8361/tcp对应的是容器内部的8361端口,HostPort对应的是映射到宿主机的端口9191。按需修改端口,然后重启docker服务,再启动容器服务就可以了。

  1. systemctl restart docker

    优缺点:这个方法的优点是没有副作用,操作简单。缺点是需要重启整个docker服务,如果在同一个宿主机上运行着多个容器服务的话,就会影响其他容器服务。

 

方法三:利用docker commit新构镜像

    docker commit:把一个容器的文件改动和配置信息commit到一个新的镜像。这个在测试的时候会非常有用,把容器所有的文件改动和配置信息导入成一个新的docker镜像,然后用这个新的镜像重起一个容器,这对之前的容器不会有任何影响。

1、停止docker容器

  1. docker stop container01

2、commit该docker容器

  1. docker commit container01 new_image:tag

3、用前一步新生成的镜像重新起一个容器

  1. docker run --name container02 -p 80:80 new_image:tag

    优缺点:这种方式的优点是不会影响统一宿主机上的其他容器,缺点是管理起来显得比较乱,没有第二种方法那么直观。

Docker命令列表

容器生命周期管理

  • run 创建一个新的容器并运行一个命令
     docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • start/stop/restart 启动/停止/重启容器 
     docker start [OPTIONS] CONTAINER [CONTAINER...]
  • kill 杀掉一个运行中的容器   

     docker kill [OPTIONS] CONTAINER [CONTAINER...] 

  • rm 删除一个或多个容器
      docker rm [OPTIONS] CONTAINER [CONTAINER...]
  • pause/unpause 暂停/恢复容器中所有的进程
      docker pause [OPTIONS] CONTAINER [CONTAINER...]
  • create 创建一个新的容器但不启动它
     docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
  • exec 在运行的容器中执行命令启动新进程(一般用以监控或查询)
      docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

容器操作

  • ps 列出容器
      docker ps [OPTIONS]
  • inspect 获取容器/镜像的元数据
        docker inspect [OPTIONS] NAME|ID [NAME|ID...]
  • top 查看容器中运行的进程信息,支持 ps 命令参数
        docker top [OPTIONS] CONTAINER [ps OPTIONS]
  • attach 连接到正在运行中的容器
        docker attach [OPTIONS] CONTAINER
  • events 从服务器获取实时事件
        docker events [OPTIONS]
  • logs 获取容器的日志
        docker logs [OPTIONS] CONTAINER

     (-t日志添加时间戳  -f跟踪日志变动 --tail n/all从倒数n条处打印)

  • wait 阻塞运行直到容器停止,然后打印出它的退出代码
        docker wait [OPTIONS] CONTAINER [CONTAINER...]
  • export 将文件系统作为一个tar归档文件导出到STDOUT
        docker export [OPTIONS] CONTAINER
  • port 列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口
        docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]

容器rootfs命令

  • commit 从容器创建一个新的镜像【像代码版本控制一样控制业务系统及其环境的版本】
        docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

      (-a 作者 -m 注释 )

  • cp 用于容器与主机之间的数据拷贝
        docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|
        docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
  • diff 检查容器里文件结构的更改
        docker diff [OPTIONS] CONTAINER

镜像仓库

  • login/logout 登陆/注销到一个Docker镜像仓库
        docker login -u 用户名 -p 密码 [SERVER]
        docker logout
  • pull 从镜像仓库中拉取或者更新指定镜像
        docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • push 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
        docker push [OPTIONS] NAME[:TAG]
  • search 从Docker Hub查找镜像
        docker search [OPTIONS] TERM 

本地镜像管理

  • images 列出本地镜像
        docker images [OPTIONS] [REPOSITORY[:TAG]]
  • rmi 删除本地一个或多个镜像
        docker rmi [OPTIONS] IMAGE [IMAGE...]
  • tag 标记本地镜像,将其归入某一仓库
        docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
  • build 使用Dockerfile构建镜像
        docker build [OPTIONS] PATH | URL |

    (OPTIONS说明:

        --build-arg=[] :设置镜像创建时的变量;
        --cpu-shares :设置 cpu 使用权重;
        --cpu-period :限制 CPU CFS周期;
        --cpu-quota :限制 CPU CFS配额;
        --cpuset-cpus :指定使用的CPU id;
        --cpuset-mems :指定使用的内存 id;
        --disable-content-trust :忽略校验,默认开启;
        -f :指定要使用的Dockerfile路径;
        --force-rm :设置镜像过程中删除中间容器;
        --isolation :使用容器隔离技术;
        --label=[] :设置镜像使用的元数据;
        -m :设置内存最大值;
        --memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
        --no-cache :创建镜像的过程不使用缓存;
        --pull :尝试去更新镜像的新版本;
        -q :安静模式,成功后只输出镜像ID;
        --rm :设置镜像成功后删除中间容器;
        --shm-size :设置/dev/shm的大小,默认值是64M;
        --ulimit :Ulimit配置

      )

  • history 查看指定镜像的构建过程
        docker history [OPTIONS] IMAGE
  • save/load 将指定镜像保存成 tar 文件/将tar文件恢复成镜像
        docker save [OPTIONS] IMAGE [IMAGE...] #镜像备份
      docker load -i TAR.tar  #镜像恢复
   (-o :输出到的文件)
  • import/export 从归档文件中构建镜像/将镜像导出【export导出会丢失构建历史无法回滚,save会保留构建历史】
        docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

      docker export -o PATH_TO_EXPORT_FILE CONTAINER

info|version

  • info 显示 Docker 系统信息,包括镜像和容器数
        docker info [OPTIONS]
  • version 显示 Docker 版本信息
        docker version [OPTIONS]

     

[注]docker命令是可以嵌套的,如 docker rmi $(docker images -q ubuntu)是删除ubuntu仓库中的所有镜像

 

使用docker 出现Error response from daemon: Conflict. The container name “***” is already in use

解决方法:

(1)给容器换一个名字, 比如说 docker run -it --name=mycentos2 centos:7 /bin/bash, 可以解决问题.
(2)将原来的容器删除

    • 查询当前容器:docker container ls -all
      在这里插入图片描述
    • 删除当前容器:docker container rm mycentos(提示: 这一步要确定删除容器没问题的情况下, 才可以做)
      在这里插入图片描述

查看docker的端口映射情况

iptables -t nat -nL --line-number

添加端口映射
查看容器静态ip

docker inspect `container_name` | grep IPAddress

添加端口
将容器的8000端口映射到docker主机的8001端口

iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.1

查看添加情况

iptables -nL

gitlab 默认占用80端口,安装过nginx的,改下配置 。

netstat  -tln

查看到80端口被打开了,处于监听的服务状态。目的:不再让80端口开放。以免整个ip被误杀。

使用

service nginx stop

运行中没有报错。

之后再运行

netstat -tln

查看到80端口已经被关闭了。

VNC Timed out waiting for a response from the computer

apt install xinetd telnet telnet-server -y

服务器上使用 netstat -na | grep 5901  命令查看,服务端口也在监听状态;(或 5900)

然后在服务器上安装了 Telnet,尝试使用内网IP连接成功,但使用外网IP就不行;

最后看到一篇文章提到这个问题,需要添加防火墙规则;

解决方法:

sudo /sbin/iptables -I INPUT 1 -p TCP --dport 5900:5910 -j ACCEPT

或者直接修改文件/etc/sysconfig/iptables文件,添加一行:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 5901:5910 -j ACCEPT

重启iptables服务:

service iptables restart

如果没有iptables.service文件,使用yum安装一下:yum install iptables-services (centos下)

sudo /sbin/iptables -I INPUT 1 -p TCP --dport 5901:5910 -j ACCEPT

防火墙也不需要重启,也没执行 flush privileges,再用VNC客户端一连接,发现连接上了。

Ubuntu默认防火墙安装、启用、配置、端口、查看状态相关信息

自打2.4版本以后的Linux内核中, 提供了一个非常优秀的防火墙工具。这个工具可以对出入服务的网络数据进行分割、过滤、转发等等细微的控制,进而实现诸如防火墙、NAT等功能。一般使用名气比较的大iptables等程序对这个防火墙的规则进行管理。

  iptables可以灵活的定义防火墙规则, 功能非常强大。但是由此产生的副作用便是配置过于复杂。一向以简单易用著称Ubuntu在它的发行版中,附带了一个相对iptables简单很多的防火墙 配置工具:ufw。

  ufw防火墙 即uncomplicated firewall的简称,不复杂的防火墙,繁琐部分的设置还是需要去到iptables,已经支持界面操作了。在命令行运行ufw命令就可以看到提示的一系列可进行的操作。

 

最简单的一个操作:

sudo ufw status(如果你是root,则去掉sudo,ufw status)可检查防火墙的状态,我的返回的是:inactive(默认为不活动)。
sudo ufw version防火墙版本:
ufw 0.29-4ubuntu1
Copyright 2008-2009 Canonical Ltd.
ubuntu 系统默认已安装ufw.

 

1.安装

sudo apt-get install ufw

2.启用

sudo ufw enable
sudo ufw default deny
运行以上两条命令后,开启了防火墙,并在系统启动时自动开启。关闭所有外部对本机的访问,但本机访问外部正常。

3.开启/禁用

sudo ufw allow|deny [service]
打开或关闭某个端口,例如:
sudo ufw allow smtp 允许所有的外部IP访问本机的25/tcp (smtp)端口
sudo ufw allow 22/tcp 允许所有的外部IP访问本机的22/tcp (ssh)端口
这个很重要,ssh远程登录用于SecureCRT等软件建议开启。或者不要开防火墙。
sudo ufw allow 53 允许外部访问53端口(tcp/udp)
sudo ufw allow from 192.168.1.100 允许此IP访问所有的本机端口
sudo ufw allow proto udp 192.168.0.1 port 53 to 192.168.0.2 port 53
sudo ufw deny smtp 禁止外部访问smtp服务
sudo ufw delete allow smtp 删除上面建立的某条规则

4.查看防火墙状态

sudo ufw status
一般用户,只需如下设置:
sudo apt-get install ufw
sudo ufw enable
sudo ufw default deny
以上三条命令已经足够安全了,如果你需要开放某些服务,再使用sudo ufw allow开启。
开启/关闭防火墙 (默认设置是’disable’)
sudo ufw enable|disable
转换日志状态
sudo ufw logging on|off
设置默认策略 (比如 “mostly open” vs “mostly closed”)
sudo ufw default allow|deny
许 可或者屏蔽端口 (可以在“status” 中查看到服务列表)。可以用“协议:端口”的方式指定一个存在于/etc/services中的服务名称,也可以通过包的meta-data。 ‘allow’ 参数将把条目加入 /etc/ufw/maps ,而 ‘deny’ 则相反。基本语法如下:
sudo ufw allow|deny [service]
显示防火墙和端口的侦听状态,参见 /var/lib/ufw/maps。括号中的数字将不会被显示出来。
sudo ufw status
UFW 使用范例:
允许 53 端口
$ sudo ufw allow 53
禁用 53 端口
$ sudo ufw delete allow 53
允许 80 端口
$ sudo ufw allow 80/tcp
禁用 80 端口
$ sudo ufw delete allow 80/tcp
允许 smtp 端口
$ sudo ufw allow smtp
删除 smtp 端口的许可
$ sudo ufw delete allow smtp
允许某特定 IP
$ sudo ufw allow from 192.168.254.254
删除上面的规则
$ sudo ufw delete allow from 192.168.254.254
linux 2.4内核以后提供了一个非常优秀的防火墙工具:netfilter/iptables,他免费且功能强大,可以对流入、流出的信息进行细化控制,它可以 实现防火墙、NAT(网络地址翻译)和数据包的分割等功能。netfilter工作在内核内部,而iptables则是让用户定义规则集的表结构。

但是iptables的规则稍微有些“复杂”,因此ubuntu提供了ufw这个设定工具,以简化iptables的某些设定,其后台仍然是 iptables。ufw 即uncomplicated firewall的简称,一些复杂的设定还是要去iptables。

ufw相关的文件和文件夹有:

/etc /ufw/:里面是一些ufw的环境设定文件,如 before.rules、after.rules、sysctl.conf、ufw.conf,及 for ip6 的 before6.rule 及 after6.rules。这些文件一般按照默认的设置进行就ok。

若开启ufw之 后,/etc/ufw/sysctl.conf会覆盖默认的/etc/sysctl.conf文件,若你原来的/etc/sysctl.conf做了修 改,启动ufw后,若/etc/ufw/sysctl.conf中有新赋值,则会覆盖/etc/sysctl.conf的,否则还以/etc /sysctl.conf为准。当然你可以通过修改/etc/default/ufw中的“IPT_SYSCTL=”条目来设置使用哪个 sysctrl.conf.

/var/lib/ufw/user.rules 这个文件中是我们设置的一些防火墙规则,打开大概就能看明白,有时我们可以直接修改这个文件,不用使用命令来设定。修改后记得ufw reload重启ufw使得新规则生效。

下面是ufw命令行的一些示例:

ufw enable/disable:打开/关闭ufw
ufw status:查看已经定义的ufw规则
ufw default allow/deny:外来访问默认允许/拒绝
ufw allow/deny 20:允许/拒绝 访问20端口,20后可跟/tcp或/udp,表示tcp或udp封包。
ufw allow/deny servicename:ufw从/etc/services中找到对应service的端口,进行过滤。
ufw allow proto tcp from 10.0.1.0/10 to 本机ip port 25:允许自10.0.1.0/10的tcp封包访问本机的25端口。
ufw delete allow/deny 20:删除以前定义的"允许/拒绝访问20端口"的规则

ubuntu中防火墙iptables配置

1.查看系统是否安装防火墙

root@localhost:/usr# which iptables
/sbin/iptables
root@localhost:/usr# whereis iptables
iptables: /sbin/iptables /etc/iptables /usr/share/iptables /usr/share/man/man8/iptables.8.gz

如果是这样的信息,那么表明iptables就是安装了的。
如果没有安装,那么使用sudo apt-get install iptables 安装。

2.查看防火墙的配置信息

配置好了的,是这个样子。

root@localhost:/usr# sudo iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt: 22
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:http
ACCEPT     icmp --  anywhere             anywhere             limit: avg 100/sec burst 100
ACCEPT     icmp --  anywhere             anywhere             limit: avg 1/sec burst 10
syn-flood  tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,RST,ACK/SYN
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain syn-flood (1 references)
target     prot opt source               destination
RETURN     tcp  --  anywhere             anywhere             limit: avg 3/sec burst 6
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

3.新建规则文件

mkdir /etc/iptables #先新建目录,本身无此目录

vim /etc/iptables/rules.v4

/etc/iptables/rules.v4 中的内容是

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:syn-flood - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p icmp -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
-A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A syn-flood -p tcp -m limit --limit 3/sec --limit-burst 6 -j RETURN
-A syn-flood -j REJECT --reject-with icmp-port-unreachable
COMMIT

4.使防火墙生效

iptables-restore < /etc/iptables/rules.v4

5.创建文件,添加以下内容,使防火墙开机启动

vim /etc/network/if-pre-up.d/iptables
#!/bin/bash
iptables-restore < /etc/iptables/rules.v4

6.添加执行权限

chmod +x /etc/network/if-pre-up.d/iptables

7.查看规则是否生效

iptables -L -n

Ubuntu中没有直接停止关闭iptables的命令,像service iptables stop这类命令,是centos才有的。关闭的话,可以暂时开放所有端口作为替代方案

iptables -P INPUT ACCEPT  
iptables -P OUTPUT ACCEPT  

 

 
 
posted @ 2020-10-23 16:16  CharyGao  阅读(2011)  评论(0编辑  收藏  举报