【问题标题】:How to add an entry to the hosts file inside a Docker container?如何向 Docker 容器内的主机文件添加条目?
【发布时间】: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 "%&lt;user&gt; ALL=(ALL) ALL" | tee -a /etc/sudoers &gt; /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


【解决方案1】:

Dockerfile 命令通常以 root 身份运行,除非您更改了用户帐户,因此您不需要 sudo。


您无需编辑任何主机文件

您可以使用host.docker.internal从容器中访问主机

https://docs.docker.com/docker-for-mac/networking/

否则,如果您想在本地进行设置,只需在容器中运行 Kafka

【讨论】:

  • 当我执行echo $USER 时,我会得到appdata 的回复。此外,当我忽略 sudo 时,我会得到 tee: Permission denied
  • 更新了我的答案,使其更加清晰。在您需要需要提升权限的东西之前尝试USER root。无论如何,你为什么真的需要开球?你似乎有一个XY problem
猜你喜欢
  • 1970-01-01
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多