Docker容器进入的4种方式

在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法。

进入Docker容器比较常见的几种做法如下:

使用docker attach
使用SSH
使用nsenter
使用exec

一、使用docker attach进入Docker容器  Docker提供了attach命令来进入Docker容器。

我们使用docker ps查看到容器信息,接下来就使用docker attach进入容器

docker attach 44fc0f0582d9

 可以看到我们已经进入到该容器中了。

但在,使用该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。
因为这个原因,所以docker attach命令不太适合于生产环境平时自己开发应用时可以使用该命令

二、使用SSH进入Docker容器

  在生产环境中排除了使用docker attach命令进入容器之后,相信大家第一个想到的就是ssh。在镜像(或容器)中安装SSH Server,这样就能保证多人进入

容器且相互之间不受干扰了,相信大家在当前的生产环境中(没有使用Docker的情况)也是这样做的。但是使用了Docker容器之后不建议使用ssh进入到Docker容

器内。关于为什么不建议使用,请参考如下文章:

为什么不需要在 Docker 容器中运行 sshd

三、使用nsenter进入Docker容器

在上面两种方式都不适合的情况下,还有一种比较方便的方法,即使用nsenter进入Docker容器。关于什么是nsenter请参考如下文章:

https://github.com/jpetazzo/nsenter

在了解了什么是nsenter之后,系统默认将我们需要的nsenter安装到主机中

如果没有安装的话,按下面步骤安装即可(注意是主机而非容器或镜像)

具体的安装命令如下:

$ wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz  
$ tar -xzvf util-linux-2.24.tar.gz  
$ cd util-linux-2.24/  
$ ./configure --without-ncurses  
$ make nsenter  
$ sudo cp nsenter /usr/local/bin  
安装好nsenter之后可以查看一下该命令的使用。

nsenter可以访问另一个进程的名称空间。所以为了连接到某个容器我们还需要获取该容器的第一个进程的PID。可以使用docker inspect命令来拿到该PID。

docker inspect命令使用如下:

$ sudo docker inspect --help   
inspect命令可以分层级显示一个镜像或容器的信息。比如我们当前有一个正在运行的容器

可以使用docker inspect来查看该容器的详细信息。

$ sudo docker inspect 44fc0f0582d9  

由其该信息非常多,此处只截取了其中一部分进行展示。如果要显示该容器第一个进行的PID可以使用如下方式

$ sudo docker inspect -f {{.State.Pid}} 44fc0f0582d9  

在拿到该进程PID之后我们就可以使用nsenter命令访问该容器了。

$ sudo nsenter --target 3326 --mount --uts --ipc --net --pid  
$ sudo nsenter --target 3326 --mount --uts --ipc --net --pid  
其中的3326即刚才拿到的进程的PID

  四、使用docker exec进入Docker容器

除了上面几种做法之外,docker在1.3.X版本之后还提供了一个新的命令exec用于进入容器,这种方式相对更简单一些,下面我们来看一下该命令的使用:

$ sudo docker exec --help   

接下来我们使用该命令进入一个已经在运行的容器

$ sudo docker ps  
$ sudo docker exec -it 775c7c9ee1e1 /bin/bash  

  

 

Linux启动/停止/重启Mysql数据库的方法

1、查看mysql版本
方法一:status;
方法二:select version();

2、Mysql启动、停止、重启常用命令
a、启动方式
1、使用 service 启动:
[root@localhost /]# service mysqld start (5.0版本是mysqld)
[root@szxdb etc]# service mysql start (5.5.7版本是mysql)

2、使用 mysqld 脚本启动:
/etc/inint.d/mysqld start

3、使用 safe_mysqld 启动:
safe_mysqld&

b、停止
1、使用 service 启动:
service mysqld stop

2、使用 mysqld 脚本启动:
/etc/inint.d/mysqld stop

3、mysqladmin shutdown

c、重启
1、使用 service 启动:
service mysqld restart
service mysql restart (5.5.7版本命令)

2、使用 mysqld 脚本启动:
/etc/init.d/mysqld restart

 

Oracle数据添加用户(dba角色)和表空间

1.首先,创建(新)用户:
    create user username identified by password;
    username:新用户名的用户名
    password: 新用户的密码
也可以不创建新用户,而仍然用以前的用户,如:继续利用scott用户

2.创建表空间:
    create tablespace tablespacename datafile 'd:data.dbf' size xxxm;
    tablespacename:表空间的名字
    d:data.dbf':表空间的存储位置
    xxx表空间的大小,m单位为兆(M)
3.将空间分配给用户:
   alert user username default tablespace tablespacename;
   将名字为tablespacename的表空间分配给username 

4.给用户授权:
   grant create session,create table,unlimited tablespace to username;

5.然后再以楼主自己创建的用户登录,登录之后创建表即可。
conn username/password;6.查看服务名env |grep SID 7.授予dba权限grant dba to username7.使用上面的用户名、密码、sid登录plsql


每步执行的sql:(sjzx是数据库名、用户名、密码、表空间名)
(1)create user sjzx identified by sjzx
(2)create tablespace sjzx datafile 'D:dbapporadataorclsjzx.dbf' 
        size 100m 
        autoextend on next 32m maxsize 2048m

(3)alter user sjzx default tablespace sjzx

(4)grant create session,create table,unlimited tablespace to sjzx

 

1.创建用户
create user user_name identified by "user_password"
default tablespace tbs_name
temporary tablespace temp profile DEFAULT;

2.授权
grant connect to user_name;
grant create indextype to user_name;
grant create job to user_name;
grant create materialized view to user_name;
grant create procedure to user_name;
grant create public synonym to user_name;
grant create sequence to user_name;
grant create session to user_name;
grant create table to user_name;
grant create trigger to user_name;
grant create type to user_name;
grant create view to user_name;
grant unlimited tablespace to user_name;
alter user user_name quota unlimited on tbs_name;

  在oracle命令行中,查看oracle表空间数据文件位置

select t1.name,t2.name   from v$tablespace t1,v$datafile t2 where t1.ts# = t2.ts#;

 

 

oracle 11g用exp无法导出空表的解决方案

Oacle 11g中有个新特性,当表无数据时,不分配segment,以节省空间,当我们用exp导出空表时,无法导出。

 

解决方法是两个方面,一是处理现有的空表,让其能导出;二是设置参数,让后续的新的空表也可以导出

 ———————————–处理一           ———————————————————————————–

查询所有空表并分配segment,使用以下语句查询生成修改空表设置的SQL:

 

select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;

  

 

 将输出的SQL复制到SQL执行窗口,并执行。

 

 ———————————–处理二           ——————————————————–—————————

设置系统参数,让后续新表自动分配segment,查询系统参数,该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment.

查询语句:show parameter deferred_segment_creation;

将这个参数修改为FALSE,修改语句为:

alter system set deferred_segment_creation=false;

再次查询确认参数是否修改成功:

show parameter deferred_segment_creation;

可见已经修改为FALSE了,如图:

 

 

 

 

 

 

禁止EXCEL单元格粘贴和拖放,只允许手动输入

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target  As Range)
If Not Application.Intersect(Target, Range("F10:M26,D2")) Is Nothing Then
MsgBox ("禁止粘贴内容!,请双击后输入内容!")
Application.CellDragAndDrop = False
Else
Application.CellDragAndDrop = True
End If
End Sub
Private Sub Worksheet_Deactivate()
Application.CellDragAndDrop = True
End Sub

 注意:Range(“F10:M26,D2”) 为指定的禁止粘贴的区域。只能手动输入。

Excel限制某一区域不能输入重复的数据

例如:需要在边框线实线的区域不能输入重复的值

 

 1.选中该区域,并记住选中区域里背景没有变灰的单元格的行列号(例如图中为:K27),后面写公式的时候使用

 

 2.按照图中的步骤找到【数据验证】

 

 3.点击前面找到的【数据验证】,【设置】页签里的允许调整为【自定义】

 

 

 4.在公式单元各输入公式

 

 

 5.点击【确认】完成任务

6.验收

 

 7.修改提示信息,选择刚才单元格实线的区域后按照步骤2打开【数据验证】,在【出错警示】页签修改即可如下图,【确认】即可完成

 

 8.验证提示信息

 

ORA-01034:oracle不可用 的解决方法

晚上打开SQLPlus输入用户名和密码老是登不了,出现如上一行代码 “ORA-01034:ORACLE不可用”的错误

 

解决思路:

1、检查服务是否启动,

2、如果已经启动,说明数据库没有启动,需要使用管理员身份登陆后,使用startup 启动;

     cmd sqlplus / as sysdba    进去后,提示:已连接到空闲例程

     startup                           例程已启动,数据库装载完毕

     如果不能启动,先可以使用shutdown immediate 再启动,再不行,就只有查错误,在不链接数据库情况下,下设置环境,将相应的错误修复后再启动

 

注意:每样操作完数据库后,记得关闭例程   shutdown immediate

ORA-12514, TNS:listener does not currently know of service requested in connect descriptor 问题解决思路

最近突然出现数据库莫名奇妙出现这个问题,之前一直好使。

从网上看各种文章检查都没有发现问题,

有这种的:https://www.cnblogs.com/kerrycode/p/6698791.html

最后我检查表空间占用情况,发现表空间占用接近100%了

参照(修改查看和修改方方法):https://www.cnblogs.com/JoePotter/p/8040443.html

后来发现oracel 监听日志文件超过2G

赶紧写个定时清理日志的脚本再观察

 

@echo off
rem @echo off 
rem 取1天之前的日期
echo wscript.echo dateadd("d",-1,date) >%tmp%tmp.vbs 
for /f "tokens=1,2,3* delims=/" %%i in ('cscript /nologo %tmp%tmp.vbs') do set y=%%i
for /f "tokens=1,2,3* delims=/" %%i in ('cscript /nologo %tmp%tmp.vbs') do set m=%%j
for /f "tokens=1,2,3* delims=/" %%i in ('cscript /nologo %tmp%tmp.vbs') do set d=%%k
if %m% LSS 9 set m=0%m%
if %d% LSS 9 set d=0%d%
echo %y%-%m%-%d%
 
rem 设置 ORACLE 位于的盘符
set ORACLE_DRIVER=E:
rem 设置 ORACLE 的主目录
set ORACLE_PATH=%ORACLE_DRIVER%appAdministrator
rem 设置 ORACLE 的监听日志目录
set LOG_PATH=%ORACLE_PATH%diagtnslsnrWIN-84ENAN9HB3Flistenertrace
rem 移动文件
move %LOG_PATH%listener.log %LOG_PATH%listener%y%-%m%-%d%.log  

 

加入系统定时任务每天执行一次防止再次过大。

 

 

继续观察中…..