
Mi anfitrión:
» lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
Mi ventana acoplable:
» docker --version
Docker version 17.05.0-ce, build 89658be
Lo que probé:
1) Configurar el nombre de host en el contenedor: falla porque el contenedor carece de las capacidades adecuadas
root@172:/# hostname something
hostname: you must be root to change the host name
2) Edición manual /etc/hostname
en el contenedor: no tiene ningún efecto después de reiniciar el contenedor y no tiene ningún propósito sin reiniciar.
3) Editar manualmente la configuración del contenedor: no funciona, no tengo idea de por qué.
sudo vi /var/lib/docker/containers/834787a141d73b359814055b5fc0ba3e1cc52effeb6f916e2adece297d600772/config.v2.json
4) Cambiar el nombre de host del contenedor en el host usando herramientas de espacios de nombres, como se describeaquí: no es posible Ubuntu 16.04.4 LTS
porque no tengo acceso a las herramientas de espacios de nombres.
¿Qué otras opciones tengo?
Razón fundamental
GitLab parece pasar su nombre de host actual a un ejecutor de GitLab para que pueda clonar repositorios. En la red predeterminada, no se puede acceder al contenedor por su nombre, solo por su dirección IP. Eso significa que necesito configurar el nombre de host del contenedor gitlab en la dirección IP, pero solo tengo la dirección IP una vez que ya se está ejecutando. Por tanto, la única solución es:
- Ejecute el contenedor
- Descubra su dirección IP
- Sobrescriba el nombre de host con la dirección IP
- Ahora gitlab y gitlab runner pueden hablar entre sí
La otra opción (limpia) sería iniciar los contenedores (gitlab y gitlab-runner) en una red personalizada, para que se pueda acceder a ellos mediante el nombre de host real, pero actualmente tengo el problema de que los contenedores iniciados por gitlab runner no son capaz de alcanzar los servicios de contenedor requeridos generados por el corredor cuando se utilizan redes personalizadas.
Respuesta1
Respuesta incorrecta a su problema, pero la respuesta que está pidiendo:
Puede configurar el nombre de host al crear el contenedor con una opción, por ejemplo:
docker run --hostname example.com image_name
¿Por qué esta es la respuesta incorrecta? Porque deberías tratar el contenedor como ganado, no como una mascota con nombre. Ajuste gitlab y el corredor para usar el nombre del servicio si está ejecutando sus contenedores como una pila de enjambre o con Docker Compose. O si está iniciando contenedores con docker run
, puede usar el nombre del contenedor, aunque recomendaría cambiar a un servicio lo antes posible para facilitar las actualizaciones.
Para una solución aún peor a lo anterior, puede agregar capacidades al contenedor para permitirle cambiar su propio nombre de host desde dentro del contenedor. Esto crea vulnerabilidades de seguridad y no se recomienda para ningún entorno donde la seguridad sea importante:
docker run --cap-add SYS_ADMIN ...
Respuesta2
Para facilitar la actualización, hágalo en la máquina host de Docker. Utilice opciones como esta con los comandos de ejecución de la ventana acoplable.
-v ./hosts:/etc/hosts -v ./hostname:/etc/hostname
Podrá actualizar el archivo en la máquina host sin tener que ingresar al contenedor y actualizar el archivo.