【发布时间】:2020-04-20 06:36:23
【问题描述】:
我有一个 Kafka 实例在我的本地机器 (macOS Mojave) 上运行,我正在尝试让 Docker 容器看到它。
Java 程序中有两个文件将被构建为 Docker 容器:
docker-entrypoint.sh:
#!/bin/bash
HOST_DOMAIN="kafka"
HOST_IP=$(awk '/32 host/ { print f } {f=$2}' <<< "$(</proc/net/fib_trie)" | head -n 1)
Dockerfile:
# ...
COPY docker-entrypoint.sh ./
RUN chmod 755 docker-entrypoint.sh
RUN apt-get install -y sudo
CMD ["./docker-entrypoint.sh"]
现在我想写下面一行:
$HOST_IP\t$HOST_DOMAIN
到 /etc/hosts 以便 Docker 容器可以与 Kafka 一起使用。考虑到写入该文件需要提升访问权限,我该怎么做?我试过这些:
1- 将CMD ["./docker-entrypoint.sh"] 更改为CMD ["sudo", "./docker-entrypoint.sh"]
2- 使用sudo tee
3- 使用su root;tee ...
4- 运行echo "%<user> ALL=(ALL) ALL" | tee -a /etc/sudoers > /dev/null,这样我就可以在没有sudo 的情况下使用tee ...。
1、2、3导致如下错误:
sudo: no tty present and no askpass program specified
我不明白这个错误。搜索它有解决方案,当一个是 sshing 运行命令,但这里没有 ssh。
要做4,我已经需要sudo,对吗?
那么,我怎样才能实现我想要做的事情呢?
【问题讨论】:
-
我会说
sudo要求输入密码,但它是在非交互模式下执行的(所以没有 TTY),所以它失败了。例如,您可以配置用户,使其无需密码即可使用sudo。
标签: bash macos docker apache-kafka