我在本地机器(macos mojave)上运行了一个kafka示例,我正在尝试让一个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` 所以我可以 `tee ...` 没有 `sudo` .
1、2和3导致以下错误:
sudo: no tty present and no askpass program specified
我不明白这个错误。对它的探索有解决问题的办法 `ssh` 正在尝试运行命令,但这里没有 `ssh` .
要做4,我已经需要 `sudo` ,对吗?
那么,我怎样才能达到我想要的目标呢?
1条答案
按热度按时间tv6aics11#
dockerfile命令通常以root用户身份运行,除非您更改了用户帐户,因此不需要sudo。
您不需要编辑任何主机文件
你可以用
host.docker.internal
从容器到达主机https://docs.docker.com/docker-for-mac/networking/
否则,只要在容器中运行kafka,就可以在本地进行设置