docker使用过程中遇到的Linux中的su命令

遇到的Linux中的su命令

linux环境下,常常需要我们切换用户,通过不同的权限,可以控制系统的安全性。所以例如ES会明确要求不能用root用户进行开发。
于是我们需要使用su命令切换用户。
然而在使用docker的过程中,我遇到了一个问题。
问题描述:
通过docker run -td name /bin/bash搭建一个容器以后,使用docker exec -it id /bin/bash 进入容器。
当此时,进入的是默认的root用户。在此内新建用户newuser后,依次赋予权限,添加用户组等一系列过程。然后使用su newuser 进入newuser的工作环境以后,发现无法继续使用sudo或者su命令。
错误显示:
su: must be run from a terminal
sudo: no tty present and no askpass program specified
解决方案:
其实最初意图是使用sudo进行管理员权限的控制,然后发现了sudo的错误提示后,百度的结果是修改sudoer之类的,所有的尝试都发现不能用。
于是我偶然的一个尝试,想要切换会root账户进行尝试,结果发现了su这个命令使用后的错误。
这个错误提示很显而易见,说明当前并不是从terminal进行的命令。在google寻找了相关的解答。在stackoverflow上的高赞回答是使用-tt进行登录,包括github的一个issue里面也显示的是docker启动容器或者进入容器时候的参数修改。但是并没有什么用。而我确实是用docker登录后,在root环境下能使用su和sudo命令,却不能在newuser环境下使用。
这时候,我突然想,为什么不先放一放呢?我在root下继续我的工作,等碰到了问题再说咯。
这里下一步的工作是要安装一个ssh进行通信。
巧了,我突然想到,要是我自己对自己进行通信呢?于是我安装了ssh,开启了相关服务和端口后,ssh localhost 连接到了本机,并成功使用了su和sudo命令。

启发:

有什么问题,不妨先放一放。

### 如何通过 Navicat 连接 Docker 中的 openGauss 数据库 要实现 Navicat 成功连接到运行在 Docker 容器中的 openGauss 数据库,需按照以下配置方法执行: #### 1. 确认 Docker 容器中 openGauss 的正常启动 确保 Docker 容器已成功安装并启动 openGauss 数据库服务。可以通过命令验证容器状态以及数据库是否可正常使用: ```bash docker exec -it opengauss sh su - omm gsql -d postgres -p 5432 ``` 上述命令用于进入容器内部,并切换至 `omm` 用户登录数据库[^1]。 #### 2. 映射 Docker 容器端口 为了使外部工具能够访问容器内的 openGauss 实例,必须设置端口映射。通常情况下,openGauss 默认使用的是 5432 端口。因此,在创建或运行 Docker 容器时应指定 `-p` 参数来绑定宿主机与容器之间的端口通信。例如: ```bash docker run -d --name opengauss \ -e OMMPWD=your_password \ -p num:5432 \ -v /data/opengauss:/var/lib/opengauss \ registry.cn-hangzhou.aliyuncs.com/opengauss/open-gauss:latest ``` 其中 `num` 是宿主机上的任意可用端口号,而 `5432` 则对应于容器内 openGauss 所使用的默认端口[^3]。 #### 3. 验证宿主机上端口监听情况 确认宿主机已经开放了所映射的端口供外界访问。可以利用以下 Linux 命令检查特定端口的状态: ```bash netstat -lnpt | grep num ``` 如果结果显示该端口处于 LISTENING 状态,则说明配置无误。 #### 4. 设置 Navicat 连接参数 打开 Navicat 软件后新建一个 PostgreSQL 类型的新连接(因为 OpenGauss 基于 PostgreSQL 开发),填写必要的字段信息如下: - **Connection Name**: 自定义名称以便识别此链接。 - **Host/IP Address**: 输入运行 Docker 的宿主机 IP 地址 (如果是本地测试则填入 localhost 或者 127.0.0.1)。 - **Port Number**: 使用之前设定好的宿主机端口号 (`num`)。 - **Username & Password**: 提供具有权限访问目标数据库的角色名及其密码;一般推荐采用超级管理员账户如 'omm' 及其相应密钥。 - **Database Name**: 如果不确定具体名字的话,默认值通常是 "postgres"。 点击保存按钮之后尝试建立连接即可完成整个流程[^2]。 --- ### 注意事项 - 若仍然遇到连接失败的情况,请核查防火墙策略或者 SELinux 是否阻止了网络请求。 - 对于生产环境部署建议调整安全组规则仅允许受信任客户端发起的数据交互行为。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值