"도커 빌드" 중에 도커 이미지에서 /etc/hosts 파일을 업데이트하는 방법
업데이트하고 싶습니다./etc/hosts
파일을 저장할 수 있습니다.
도커 파일에 아래 줄을 추가했는데 업데이트가 안 됩니다./etc/hosts
파일을 생성하거나 오류를 생성하지 않습니다.
RUN echo "192.168.33.11 mynginx" >> /etc/hosts
업데이트가 필요합니다./etc/hosts
. 누가 이것에 대해 제안해 줄 수 있습니까?
더 최신 버전의 도커를 사용하면 도커 컴포지트와 그 지시를 수행할 수 있습니다.
호스트 이름 매핑을 추가합니다.
클라이언트 매개 변수와 동일한 값을 사용합니다(이미 도커 1.8에서 사용 가능해야 함).extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"
간단히 말해서: 수정/etc/hosts
컨테이너를 만들 때가 아니라 실행할 때 사용할 수 있습니다.
도커 17.x+의 경우 아래에 언급된 내용이 있지만, 34078호와 이 답변에서 언급된 바와 같이 다음과 같습니다.
그
--add-host
빌드 중 기능은 빌드 중에 호스트를 재정의할 수 있도록 설계되었지만 이미지에 해당 구성이 유지되지 않도록 설계되었습니다.
이러한 링크는 당면한 문제를 해결하기 위한 전략을 나타냅니다.
- 내부 DNS를 실행합니다. 데몬에서 사용할 기본 DNS 서버를 설정할 수 있습니다. 이렇게 하면 시작된 모든 컨테이너가 기본적으로 구성된 DNS를 자동으로 사용합니다.
- 도커 컴포지트를 사용하고 다음을 제공합니다.
docker-compose.yml
당신의 개발자들에게.
도커 컴포지트 파일을 사용하면 컨테이너를 시작할 때 사용해야 하는 모든 옵션을 지정할 수 있으므로 개발자는 단지 도커 컴포지트를 사용하여 컨테이너를 시작할 수 있습니다.
이러한 솔루션은 다음을 활용할 수 있습니다.docker-compose
답변에서 앞서 제시된 방법으로, 그것과 함께.extra_hosts
지시의
다음을 사용하여 이미지의 호스트 파일을 수정할 수 없습니다.echo
인에RUN
docker 데몬이 이미지에서 컨테이너를 시작할 때 파일(/etc/dock)과 해당 콘텐츠(content)를 유지하기 때문에 단계를 지정합니다.
그러나 다음을 사용하여 동일한 작업을 수행할 수 있습니다.
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
도커 문서에서 알 수 있듯이 명령을 수행합니다.exec을 사용하면 java 명령을 컨테이너의 PID 1로 만들 수 있습니다.도커 인터럽트는 그것에만 응답할 것입니다.
https://docs.docker.com/engine/reference/builder/ # 진입점 참조
도커가 최근에 추가한 것 같아요.--add-host
정말 멋진 도커 빌딩에 깃발을 꽂습니다.
[편집] 그래서 이 기능은 17.04.0-ce에 업데이트 되었습니다.
에 docker build
함께--add-host
flag 방문해주세요: https://docs.docker.com/edge/engine/reference/commandline/build/
이것은 여전히 구글에서 첫 번째 답으로 나오기 때문에 가능한 해결책을 제공하겠습니다.
여기서 가져온 명령어는 놀랍게도 나에게 효과가 있었습니다(Docker 1.13.1, Ubuntu 16.04):
docker exec -u 0 <container-name> /bin/sh -c "echo '<ip> <name>' >> /etc/hosts"
도커를 실행할 때 다음 명령을 사용할 수 있습니다.
docker run [OPTIONS] --add-host example.com:127.0.0.1 <your-image-name>:<your tag>
를 .example.com
호스트에게127.0.0.1
효과가 있습니다.
이것이 누군가에게 유용하다면,HOSTALIASES
for env는게가다:다가 :
echo "fakehost realhost" > /etc/host.aliases
export HOSTALIASES=/etc/host.aliases
도커 실행 중에 --add-host 옵션을 사용할 수 있습니다.
사용할 경우: 도커 실행 --add-host mynginx:192.168.33.11 [image_name]:[태그]
/etc/hosts가 업데이트됩니다.
다음 명령을 사용하여 확인할 수 있습니다.
- 도커 이그제큐티브 - it [id] sh
만약 그녀가 당신에게 효과가 없다면, 당신은 bash나 /bin/shor /bin/bin을 시도할 수 있습니다.
- 고양이/등/고양이
방금 SH 스크립트를 만들어서 스타트 도커에서 실행했습니다.
이 스크립트에서는 모든 서비스를 시작하고 호스트 파일을 업데이트합니다.
도커 파일:
CMD /tmp/init_commands.sh & sleep infinity
init_commands.sh
any other commands...
echo "192.168.11.5 XXXXXXX" >> /etc/hosts
echo "192.168.11.6 XXXXXXY" >> /etc/hosts
echo "192.168.11.7 XXXXXXZ" >> /etc/hosts
Following은 도커 빌드 대신 도커 실행 중에 파일을 마운트하여 작업했습니다.
docker service create --name <name> --mount type=bind,source=/etc/hosts,dst=/etc/hosts <image>
Tis is me Dockefile
FROM XXXXX
ENV DNS_1="10.0.0.1 TEST1.COM"
ENV DNS_1="10.0.0.1 TEST2.COM"
CMD ["bash","change_hosts.sh"]`
#cat change_hosts.sh
su - root -c "env | grep DNS | akw -F "=" '{print $2}' >> /etc/hosts"
- 정보
- 사용자 must su
다음을 사용하여 컨테이너를 실행하기 위한 간단한 답변:
docker exec -it <container name> /bin/bash
컨테이너가 열리면 다음 작업을 수행합니다.
cd ..
그리고나서
`cd etc`
그러면 당신은 할 수 있습니다.
cat hosts
또는:
apt-get update
apt-get vim
또는 원하는 편집기를 사용하여 vim에서 열 수 있습니다. 여기서 시작 IP를 0.0.0으로 수정할 수 있습니다.
언급URL : https://stackoverflow.com/questions/38302867/how-to-update-etc-hosts-file-in-docker-image-during-docker-build
'programing' 카테고리의 다른 글
JS에서 페이지를 언로딩(이동)하지 못하게 하려면 어떻게 해야 합니까? (0) | 2023.09.14 |
---|---|
Spring MVC에서 사람들이 XSS를 하지 못하게 하려면 어떻게 해야 합니까? (0) | 2023.09.14 |
"새로운 크로스 플랫폼 PowerShell https://aka.ms/pscore6 을 사용해 보십시오"를 억제합니다. (0) | 2023.09.14 |
Spring RestTemplate로 SSL 인증서 검사를 비활성화하는 방법? (0) | 2023.09.14 |
워드프레스 SQL: 게시물 카테고리 및 태그 가져오기 (0) | 2023.09.14 |