/etc/hosts
"docker 빌드"중에 파일 을 업데이트하고 싶습니다 .
Dockerfile에 아래 줄을 추가했지만 /etc/hosts
파일을 업데이트 하거나 오류가 발생하지 않습니다.
RUN echo "192.168.33.11 mynginx" >> /etc/hosts
업데이트해야합니다 /etc/hosts
. 누구든지 이것에 대해 제안 할 수 있습니까?
/etc/hosts
"docker 빌드"중에 파일 을 업데이트하고 싶습니다 .
Dockerfile에 아래 줄을 추가했지만 /etc/hosts
파일을 업데이트 하거나 오류가 발생하지 않습니다.
RUN echo "192.168.33.11 mynginx" >> /etc/hosts
업데이트해야합니다 /etc/hosts
. 누구든지 이것에 대해 제안 할 수 있습니까?
답변:
최신 버전의 docker를 사용하면 docker-compose 및 해당 지시문 으로 수행 할 수 있습니다.extra_hosts
호스트 이름 매핑을 추가합니다. 클라이언트 매개 변수
와 동일한 값을 사용하십시오 (이미 docker 1.8에서 사용 가능해야 함).docker run
--add-host
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
간단히 말해 /etc/hosts
, 컨테이너를 빌드하는 것이 아니라 실행할 때 컨테이너를 수정 하십시오.
Docker 17.x +를 사용하면 아래 에 docker build --add-host
언급 되어 있지만 문제 34078 및 이 답변 에서 언급했듯이 :
--add-host
빌드시 기능은 빌드하는 동안 호스트를 오버라이드 (override) 할 수 있도록 설계되어 있지만 이미지에서 해당 구성을 유지하지.
언급 된 솔루션은 위에서 제안한 docker-compose를 참조합니다.
- 내부 DNS를 실행합니다. 데몬에서 사용할 기본 DNS 서버를 설정할 수 있습니다. 이렇게하면 시작된 모든 컨테이너가 기본적으로 구성된 DNS를 자동으로 사용합니다.
- docker compose를 사용하고
docker-compose.yml
개발자 에게 제공 하십시오.
docker compose 파일을 사용하면 컨테이너를 시작할 때 사용해야하는 모든 옵션을 지정할 수 있으므로 개발자는 설정해야하는 모든 옵션을 사용하여 컨테이너를 시작하기 위해 Docker를 구성 할 수 있습니다.
docket exec -it <container name> /bin/bash
다음 선호하는 명령 줄 편집기 (vim, emacs, nano, echo ''. >> />)를 사용하여 / ect / host 아래에서 도커의 컨테이너 호스트를 업데이트 할 수 있습니다.
이미지 echo
에서 RUN
컨테이너를 시작할 때 docker 데몬이 파일 (/ etc / hosts) 및 해당 내용 (hosts 항목)을 유지하므로 in step을 사용하여 이미지의 호스트 파일을 수정할 수 없습니다 .
그러나 다음을 사용하여 동일한 결과를 얻을 수 있습니다.
ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.254.10 database-server >> /etc/hosts && echo 192.168.239.62 redis-ms-server >> /etc/hosts && exec java -jar ./botblocker.jar " ]
여기서 주목해야 할 핵심 exec
은 docker 문서에서 제안 하는 명령 사용입니다 . exec 를 사용 하면 컨테이너에 대한 Java 명령이 PID 1이됩니다. Docker 인터럽트는 이에 대해서만 응답합니다.
참조 https://docs.docker.com/engine/reference/builder/#entrypoint를
ENTRYPOINT
는 이미지에 대한 지침이 아닙니다. 이 이미지에서 컨테이너를 실행할 때만 진입 점을 표시합니다. 즉, 컨테이너가 실행 된 후에 만 호스트 항목이 존재합니다. 요구 사항이 필수적이라고 생각하지 않습니다. 약간의 오해가있을 것입니다.
저는 docker가 최근 --add-host
에 docker 빌드에 플래그를 추가했다고 생각 합니다.
[편집]이 기능은 17.04.0-ce 에서 업데이트되었습니다.
플래그 docker build
와 함께 사용하는 방법에 대한 자세한 내용은 https://docs.docker.com/edge/engine/reference/commandline/build/--add-host
를 방문하십시오.
--add-host
기능은 CentOS의 Docker 12에서 사용할 수 있습니다.
이것이 여전히 Google에서 첫 번째 답변으로 나오기 때문에 가능한 해결책에 기여할 것입니다.
여기서 가져온 명령은 놀랍게도 나를 위해 일했습니다 (Docker 1.13.1, Ubuntu 16.04) :
docker exec -u 0 <container-name> /bin/sh -c "echo '<ip> <name> >> /etc/hosts"
이것이 누구에게나 유용하다면 HOSTALIASES
env 변수가 저에게 효과적 이었습니다.
echo "fakehost realhost" > /etc/host.aliases
export HOSTALIASES=/etc/host.aliases
docker 실행시 다음 명령으로 수행 할 수 있습니다.
docker run [OPTIONS] --add-host example.com:127.0.0.1 <your-image-name>:<your tag>
여기서 나는 example.com
localhost 127.0.0.1
와 그 작업에 매핑 하고 있습니다.
hosts
Docker 컨테이너에 추가 할 파일을 준비하십시오 .1.2.3.4 abc.tv
5.6.7.8 domain.xyz
1.3.5.7 odd.org
2.4.6.8 even.net
hosts
다음 줄을 추가 하여 파일을 컨테이너에 복사하십시오 .Dockerfile
COPY hosts /etc/hosts_extra
ENTRYPOINT
나 CMD
또는 CRON
작업이 다음에 또는 적어도 다음 명령 줄을 통합 실행중인 컨테이너 내에서이를 실행 :cat /etc/hosts_extra >> etc/hosts;
Dockerfile
수정 사항이 손실되므로에 다음을 추가 할 수 없습니다 .RUN cat /etc/hosts_extra >> etc/hosts;
다음은 도커 빌드 대신 도커 실행 중에 파일을 마운트하여 나를 위해 일했습니다.
docker service create --name <name> --mount type=bind,source=/etc/hosts,dst=/etc/hosts <image>