@Hfnas

Как добавить строчку записи в конец файла /etc/hosts в докерфайле?

Цель задачи: необходимо, чтобы вместо "127.0.0.1:8080" можно набить в адресной строке http://test, те http://127.0.0.1:8080=http://test

1. пишу в /etc/apache2/sites-available/000-default.conf следующее:
в докерфайле за это отвечает строчка
ADD httpd.conf /etc/apache2/sites-available/000-default.conf

после формирования командой build в контейнере присутствует код
<VirtualHost *:80>
        
        ServerName test
....
</VirtualHost>


2. в докерфайле есть команда:
RUN
 echo "127.0.0.1 test" >> /etc/hosts \
 && a2enmod rewrite

к сожалению, ничего не добавилось в файл /etc/hosts , если же в самом контейнере запускать echo "127.0.0.1 test" >> /etc/hosts- то добавится( в этом случае перезагружаю апач, и контейнер просто портится- принудительный выход осуществляется-(Restarting Apache httpd web server: apache2Terminated- и образ приходится заново перезагружать.))

Полностью докерфайл
FROM php:7.3.4-apache
ADD httpd.conf /etc/apache2/sites-available/000-default.conf
ADD php.ini /usr/local/etc/php/php.ini
RUN apt-get update \
 && apt-get install -y git libzip-dev sqlite3 mc vim libicu-dev wget unzip\
 && pecl install xdebug-2.7.2 \
 && docker-php-ext-enable xdebug \
 && docker-php-ext-install zip pdo_mysql \
 && docker-php-ext-configure intl \
 && docker-php-ext-install intl \
 && echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
 && echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini\
 && echo bash -c "127.0.0.1 test" >> /etc/hosts \
 && a2enmod rewrite

из этого докерфайла следующие строчки ничего не делают, проверила на контейнере:
&& echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
 && echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini\
 && echo bash -c "127.0.0.1 zend_web" >> /etc/hosts \
  • Вопрос задан
  • 1269 просмотров
Решения вопроса 1
@ISE73
команда после && выполняется только в том случае если предыдущая выполнилась без ошибок.
Раз у вас после "docker-php-ext-install intl " ничего не отработало, значит в ней проблема.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
shabelski89
@shabelski89
engineer
Не очень понятно зачем это нужно? Оставьте localhost и все. Лучше пропишите на машинах откуда заходите на вебсервер в hosts желаемое имя. В Вашем случае на хосте, на котором развернут докер. Вы же не из докера заходите веб, а с клиента, который на основном хосте, или на любом другом пк в данной сети( прописав ручками в hosts каждого ip test) где ip ессно адрес где докер крутится.
Ответ написан
POS_troi
@POS_troi
СадоМазо Админ, флудер, троль.
В документации --add-host
...
--add-host=""      : Add a line to /etc/hosts (host:IP)
...

Это при RUN
docker run ... --add-host="test"

Далее

http://127.0.0.1:8080=http://test

Это так не работает, по крайне мере без какого нить proxy локального.
Так что если 127.0.0.1:8080 то и test:8080

Если я вас правильно понял, вы желаете локально поднять контейнер, в нём некий web сервис и на этом-же компьютере осуществлять "вход"?
Тогда строчку "127.0.0.1 test" вам необходимо добавлять в ваш локальный host а не тот что в контейнере ибо резолвинг имени в адрес, происходит у вас локально.
Ответ написан
Assargin
@Assargin
Перед ответом смотрю наличие ✔ в ваших вопросах
Цель задачи: необходимо, чтобы вместо "127.0.0.1:8080" можно набить в адресной строке http://test, те http://127.0.0.1:8080=http://test

Чтобы решить эту задачу, вам надо сделать 2 вещи:
1) руками в hosts-файл на вашей хост-машине добавить строчку 127.0.0.1 test. Так вы решите вопрос с именем хоста (test вместо IP 127.0.0.1)
2) при старте контейнера с веб-сервером биндить порт веб-сервера из контейнера с 80-м портом вашей хост-машины (с помощью параметра --publish): что-то типа docker run --publish 80:8080 ... - здесь как бы написано: "связать внутренний порт контейнера 8080 с внешним портом хост-машины 80" (в вашем случае вроде как оба порта будут 80, и внутренний, и внешний).
Если внешний порт, с помощью которого вы хотите смотреть веб-сайт, отличается от дефолтного (80 для HTTP и/или 443 для HTTPS) - никакими прописываниями ни в каких магических файлах не получится избавиться от указания порта при набирании адреса в адресной строке браузера.
И ещё - если у вас на хост-машине есть что-то, что уже слушает 80-й порт - ну мало ли, может nginx какой запущен или тот же апач - то связать порты не выйдет, нужно сначала остановить тот сервис, что сидит на 80-м порту. Ну или не париться и использовать любой другой порт.

В плане именно манипуляций с докером: кроме бинда внутреннего порта контейнера на "внешний" вашей хост-машины ничего больше не нужно делать. Контейнер вам в файл хост-машины строчку не пропишет. Не, технически это возможно сделать, но не нужно совершенно точно.

И скажите: откуда вообще изначально взялась такая потребность? Если чисто сделать красивый адрес для использования локально в процессе разработки - ну ок, хотя можно и без этого. Если вы делаете это уже для продакшна - то всё, что вы описали в вопросе - не то, не так и не в ту сторону.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы