简体   繁体   中英

Alpine Linux docker set hostname

I'm using lwieske/java-8:server-jre-8u121-slim with Alpine Linux

I'd like to set hostname from a text file to be seen globally (for all shells)

/ # env
HOSTNAME=2fa4a43a975c

/ # cat /etc/afile
something

/ # hostname -F /etc/afile
hostname: sethostname: Operation not permitted

everything running as a service in swarm

i want every node to have unique hostname based on container id.

您也可以向 docker run 提供 --hostname 标志:

docker run -d --net mynet --ip 162.18.1.1 --hostname mynodename

As for workaround, can use docker-compose to assign the hostnames for multiple containers.

Here is the example docker-compose.yml :

version: '3'
services:
  ubuntu01:
    image: ubuntu
    hostname: ubuntu01
  ubuntu02:
    image: ubuntu
    hostname: ubuntu02
  ubuntu03:
    image: ubuntu
    hostname: ubuntu03
  ubuntu04:
    image: ubuntu
    hostname: ubuntu04

To make it dynamic, you can generate docker-compose.yml from the script.

Then run with: docker-compose up .

docker service create has a --hostname parameter that allows you to specify the hostname. On a more personal note, if you'll connect to one of your services, then any other service on the same network will be pingable and accessible using the service name, with the added benefit of allowing you multiple replicas without worrying about what those will be named.

Better to be late than never. Found this Q trying to find the same thing myself.

The answer is to give the docker container SYS_ADMIN capability and 'hostname -F' will now set the hostname properly.

docker-compose: cap_add: - SYS_ADMIN

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM