docker镜像/容器相关问题汇总

1,239 阅读6分钟

以命令行方式,进入运行中的容器

先通过docker ps找到运行中容器的容器ID

image.png

再通过如下方式进入

docker exec -it /bin/bash

docker exec -it --privileged=true /bin/bash

--privileged=true表示以特权模式进入。如果你进行某些操作出现类似如下的没有权限的提示,可以试试以特权模式进入,再重试之前的操作

15 Feb 06:46:29 ntpdate[60170]: Can't adjust the time of day: Operation not permitted

查看时间

date
date +'%Y/%m/%d %H:%M:%S %A %Z'

date +"%Y/%m/%d %H:%M:%S %A %Z"
date -R
date "+%Z"

通过别名方式更改ls -l的日期格式

# 显示当前已存在的alias

alias

修改ls的日期格式

alias ls='ls --color=auto --time-style +"%T %F"'

查看效果

ls -l
ll

通过别名方式更改date的默认日期格式

alias date='date +"%Y/%m/%d %H:%M:%S %A %Z"'

查看效果

date

上面的方法只是临时修改,重启后就会失效,要想永久生效,需要修改 /root/.bashrc 文件。

alias ls='ls --color=auto --time-style +"%T %F"'
alias date='date +"%Y/%m/%d %H:%M:%S %A %Z"'

删除别名

unalias ls

同步时间

  • 命令行方式进入docker容器

docker exec -it --privileged=true /bin/bash

这里注意--privileged=true,表示以特权模式进入,如果是非特权模式,可能在执行时间同步命令时,出现权限不足的错误提示

  • 使用 ntpdate -u ntp1.aliyun.com 命令同步时间

若不加上-u参数, 会出现以下提示:no server suitable for synchronization found

-u:从man ntpdate中可以看出-u参数可以越过防火墙与主机同步;

如果ntpdate 命令不存在,则先安装apt-get update && apt-get install -y ntpdate

ntp常用服务器

国内

cn.pool.ntp.org  中国开源免费NTP服务器

ntp1.aliyun.com 阿里云NTP服务器

ntp2.aliyun.com 阿里云NTP服务器

time1.aliyun.com 阿里云NTP服务器

time2.aliyun.com 阿里云NTP服务器

国外

time1.apple.com 苹果NTP服务器

time2.apple.com 苹果NTP服务器

time3.apple.com 苹果NTP服务器

time4.apple.com 苹果NTP服务器

time5.apple.com 苹果NTP服务器

time1.google.com 谷歌NTP服务器

time2.google.com 谷歌NTP服务器

time3.google.com 谷歌NTP服务器

time4.google.com 谷歌NTP服务器

pool.ntp.org 开源免费NTP服务器

使用定时任务定期同步时间

apt-get update && apt-get install -y cron

echo "*/20 * * * * /usr/sbin/ntpdate -u ntp1.aliyun.com >/dev/null &" >> /var/spool/cron/root

更改时区

使用 tzselect 更新时区,如果没安装,则先安装apt update && apt install tzselect

执行命令tzselect, 会给出一系列的选项,让你选择,输入对应数字即可选择

image.png

image.png

最后tzselect没有直接给你设置上去,而是给出提示(红线部分既是)

TZ='Asia/Shanghai'; export TZ在终端直接执行一下就OK了

没有vim编辑器

apt-get update && apt-get install -y vim

查看linux相关信息

cat /proc/version: 该文件记录了linux内核发行的版本、用于编译内核的gcc版本、内核编译的时间、以及内核编译者的用户名

uname -a: 是一个打印系统信息的工具,包括:内核名称、版本号、系统详细信息以及所运行的操作系统等

cat /etc/os-release: 可以看到linux发行版信息

image.png

更新ubuntu

备份原本的源

cp /etc/apt/sources.list /etc/apt/sources.list.bak

将下面的新源信息,复制到剪切板

先要通过cat /etc/os-release,看具体的版本信息, 再到 ubuntu | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 选择对应版本的源

通过vim编辑器,用新源信息替换旧源信息

vim /etc/apt/sources.list

然后更新sudo apt-get update这里是更新了源信息

如果你需要将所有软件的版本都更新,那要执行apt-get upgrade(linux有必要更新,docker一般无需保持最新)

命令查找文件与查找命令所在位置

find / -name test

# / 表示从根目录开始查找
# -name 表示基于文件名查找
# test 表示查找的文件名为test
which git

# 表示查找git命令所在位置

查看当前的用户

查看当前用户名

whoami

查看当前用户id个gid

id

用户id和gid的作用

UID和GID是Linux系统中用于标识身份的数字标识符。每个用户和组都有一个唯一的UID和GID,通过这些标识符可以在系统级别上对用户和组进行身份验证和授权。在Linux系统中,每个文件和目录都有一个所有者和所属组,文件和目录的权限只能由文件拥有者或管理员来设置和更改。因此,需要对用户和用户组进行管理。

修改用户的UID和组的GID

sudo usermod -u [新UID] [用户名]
sudo groupmod -g [新GID] [组名]

Linux系统中UID和GID详解_uid gid-CSDN博客

Dockerfile创建用户与切换用户

Dockerfile

# 基础镜像
FROM ubuntu:16.04

# 定义build参数,并设置默认值
ARG user=test

# 元数据
LABEL maintainer="fzzjoy" email="fzz_joy@163.com"

# 安装依赖
RUN apt-get update && apt-get install -y sudo 

# 添加用户:赋予sudo权限,指定密码
RUN useradd --create-home --no-log-init --shell /bin/bash ${user} \
    && adduser ${user} sudo \
    && echo "${user}:1" | chpasswd

# 改变用户的UID和GID
# RUN usermod -u 1000 ${user} && usermod -G 1000 ${user}

# 指定容器起来的工作目录
WORKDIR /home/${user}

# 指定容器运行时的默认登录用户
USER ${user}

# RUN是构建时执行
RUN echo "${user}" > world.txt

image.png

dockerfile-新增用户并赋予sudo权限以及指定密码_dockerfile sudo-CSDN博客

linux用户分类

Linux下用户分为3类:超级用户(root)、系统用户、普通用户。

超级用户(root)

超级用户的用户名为root,它具有一切操作权力,因此为安全起见,建议不要轻易的在root账户下面对文件进行操作。在Linux操作系统的字符界面,root账户的提示符为#,且默认情况下,root用户的UID为0

系统用户

系统用户是Linux系统正常工作所必需的内建的用户,一般是用于管理服务所用。系统用户不能用来登陆,如bin、daemon、lp等用户。系统用户的UID一般为1~499,它们的shell为/sbin/nologin。

普通用户

普通用户是为了让使用者能够使用Linux系统资源而建立的,用户新建的账号一般就是普通账号。在Linux操作系统的字符界面,普通用户的提示符为$,且普通用户的UID默认为1000~60000

linux命令useradd添加用户详解 - irisrain - 博客园 (cnblogs.com)

ubuntu用户添加adduser, useradd并给予sudo权限_sudo adduser-CSDN博客

查看docker容器日志

docker logs -t --tail 15 3b94008edc86

# -t 按时间输出
# --tail 15 最后15条
# 3b94008edc86 容器id
docker logs -f -t 3b94008edc86

# -f 一直监控输出
# -t 按时间输出
# 3b94008edc86 容器id

在宿主机查看容器ip

docker inspect 9368f78055ca | findstr "IPAddress"