Docker 默认用户名密码
Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,并在任意操作系统上运行。在使用 Docker 进行应用程序容器化时,有时需要指定默认的用户名和密码来保护容器内的敏感信息。本文将介绍如何设置 Docker 容器的默认用户名和密码,并提供相关代码示例。
Docker 容器的默认用户名和密码设置
对于 Docker 容器,可以通过以下两种方式设置默认的用户名和密码:
- 使用 Dockerfile 设置默认用户名和密码
- 在运行容器时通过环境变量设置默认用户名和密码
使用 Dockerfile 设置默认用户名和密码
Dockerfile 是一个文本文件,包含一条条的指令,每条指令构建一层。通过编写 Dockerfile,可以定义容器的构建过程,并在其中设置默认用户名和密码。
下面是一个使用 Dockerfile 设置默认用户名和密码的示例:
FROM ubuntu:latest
RUN useradd -ms /bin/bash myuser
RUN echo 'myuser:mypassword' | chpasswd
USER myuser
WORKDIR /home/myuser
在上述示例中,首先使用 FROM
指令指定了基础镜像为最新的 Ubuntu 镜像。然后使用 RUN
指令创建了一个新用户 myuser
,并将其登录 shell 设置为 /bin/bash
。接着使用 echo
和 chpasswd
命令设置了用户 myuser
的密码为 mypassword
。最后通过 USER
和 WORKDIR
指令切换到用户 myuser
并设置工作目录。
在运行容器时通过环境变量设置默认用户名和密码
除了使用 Dockerfile 设置默认用户名和密码外,还可以在运行容器时通过环境变量的方式设置。
下面是一个在运行容器时通过环境变量设置默认用户名和密码的示例:
docker run -e USERNAME=myuser -e PASSWORD=mypassword ubuntu:latest
在上述示例中,通过 -e
参数设置了两个环境变量 USERNAME
和 PASSWORD
,分别为 myuser
和 mypassword
。这样,在容器内部就可以使用这两个环境变量来设置默认的用户名和密码。
代码示例
下面是一个使用 Flask 搭建的简单 Web 应用程序,其中设置了默认的用户名和密码。
from flask import Flask, request
from functools import wraps
from werkzeug.security import check_password_hash
app = Flask(__name__)
def requires_auth(f):
@wraps(f)
def decorated(*args, **kwargs):
auth = request.authorization
if not auth or not check_password_hash(get_password_hash(auth.username), auth.password):
return 'Authentication required', 401
return f(*args, **kwargs)
return decorated
def get_password_hash(username):
# 根据用户名获取密码哈希值的逻辑
return 'mypasswordhash'
@app.route('/')
@requires_auth
def index():
return 'Hello, authenticated user!'
if __name__ == '__main__':
app.run()
上述示例中,使用 Flask 框架搭建了一个简单的 Web 应用程序。通过 requires_auth
装饰器,对访问 /
路由的请求进行鉴权,要求用户提供正确的用户名和密码。在 get_password_hash
函数中,可以根据用户名获取正确的密码哈希值。如果提供的用户名和密码与预设的一致,则返回 'Hello, authenticated user!',否则返回 'Authentication required'。
序列图
下面是一个使用 mermaid 语法绘制的序列图,展示了用户进行身份验证的过程。
sequenceDiagram
participant User
participant WebApp
User->>WebApp: 发起身份验证请求
WebApp->>User: 返回身份验证页面
User->>WebApp: 提交用户名和密码
WebApp->>WebApp: 验证用户名和密码
alt 验证成功
WebApp->>User: 返回 'Hello, authenticated user!'
else 验证失败
WebApp->>User: 返回 'Authentication required'
end
上述序列图清晰地展示了用户发起身份