Làm thế nào để xác định tên máy chủ cho container đang chạy?


51

Tôi gặp sự cố khi đặt tên máy chủ trên bộ chứa docker đang chạy. Tôi cũng gặp khó khăn khi hiểu cách chỉ định tên máy chủ sau khi hình ảnh được bắt đầu.

Tôi đã bắt đầu một container từ một hình ảnh tôi đã tải xuống:

sudo docker run -p 8080:80 -p 2222:22 oskarhane/docker-wordpress-nginx-ss

Nhưng tôi quên chỉ định tên máy chủ thông qua -h; Làm thế nào tôi có thể chỉ định tên máy chủ bây giờ mà container đang chạy?


Bạn có thể dừng container và bắt đầu lại cung cấp tên máy chủ không?
dawud

AFAIK chỉ hoạt động khi bạn runhình ảnh, không phải khi bạn bắt đầu một container.
Miguel Ping

Đôi khi tất cả những gì bạn muốn là xem dấu nhắc lệnh bash với một tên thích hợp. Nếu đó là trường hợp, bạn có thể chỉnh sửa giá trị PS1 trong .bashrc. Hãy nhìn vào Askubfox.com/a/549150/55365 để được gợi ý. Trong bất kỳ PS1 nào, bạn có thể thêm một chuỗi (được tô màu) được bao quanh bởi * hoặc # để đặt nó tách biệt, với tên của máy chủ hoặc dịch vụ.
XUÂN

@dawud bạn không thể cung cấp tên máy chủ mới khi chạy docker restart tài liệu
dangonfast

Câu trả lời:


48

Chỉnh sửa /etc/hostnamelà một điều mà bạn cần truy cập ssh bên trong container. Nếu không, bạn có thể quay lên container với -htùy chọn.

Để đặt tên máy chủ và tên miền:

$ docker run -h foo.bar.baz -i -t ubuntu bash
root@foo:/# hostname
foo
root@foo:/# hostname -d
bar.baz
root@foo:/# hostname -f
foo.bar.baz

5
Bạn có thể docker exec /bin/bashtrên một container đang chạy, không cần cài đặt ssh(đó là một cách thực hành tồi cho mục đích quản trị).
jjmontes

Bạn cũng có thể muốn chỉnh sửa / etc / hosts rằng nó được giải quyết chính xác thành một địa chỉ.
dtoubelis

2
Bạn không thể thay đổi tên máy chủ trong một container đang chạy với hostname(thiếu khả năng). Chạy docker run -h <hostname> <image> <container-name>tạo một thùng chứa mới với tên máy chủ đã cho.
dangonfast

6

Dừng container và dịch vụ

sudo docker stop CONTAINER_NAME
sudo service docker stop

Chỉnh sửa tệp cấu hình (JSON) [Trước tiên bạn nên tạo bản sao lưu]

/var/lib/docker/containers/CONTAINER_ID/config.json

Thay thế

"Tên máy chủ": "WHATEVER"

với

"Tên máy chủ": "NEW_HOSTNAME"

Bắt đầu container và dịch vụ

sudo service docker start
sudo docker start CONTAINER_NAME

(Tùy chọn bạn cũng có thể đính kèm docker)

sudo docker attach CONTAINER_NAME

Chi tiết về các docker (ví dụ CONTAINER_NAME, CONTAINER_ID) có thể được lấy bằng cách chạy

sudo docker ps -a

không hoạt động. bị ghi đè mỗi khi tôi bắt đầu container.
Ahmed

thật lạ tôi vừa sao chép các bước này và nó vẫn hoạt động. phiên bản docker 1.7.1. Bạn có chắc chắn đã đóng container và dịch vụ trước khi chỉnh sửa tệp không?
Tomot

Hoạt động trên Docker 17.04.0-ce, khi chỉnh sửa / etc / hostname thì không. Nếu bạn chưa tạo container, câu trả lời khác với -h sẽ tốt hơn, nhưng trong trường hợp của tôi, tôi đã gặp rắc rối khi thiết lập container và không muốn tạo lại nó chỉ để đặt tên máy chủ.
Una

Không hoạt độngDocker version 17.05.0-ce, build 89658be
dangonfast

4

Khởi động lại container sẽ là tùy chọn dễ nhất - nhưng bạn cũng có thể chỉnh sửa / etc / hostname và đi từ đó.


Chỉnh sửa /etc/hostnamekhông có hiệu lực sau khi khởi động lại, vì nó được ghi đè mỗi lần với tên máy chủ "thực", được quản lý bởi docker. Bạn không thể chạy hostnametrên container, vì container không có khả năng cho hoạt động đó (theo mặc định và bạn không muốn thay đổi điều đó)
dangonfast

Và chỉnh sửa /etc/hostnamevà không khởi động lại container không có mục đích.
dangonfast


1

https://evolveweb.ca/blog/changing-docker-hostnames-namespaces mô tả một cách để làm điều này. Ý tưởng cơ bản là sử dụng docker inspectđể lấy pid của container, sau đó nhập không gian tên uts của container thông qua nsenter. Chạy hostnamebên trong không gian tên đó sẽ thay đổi tên máy chủ cho phiên bản docker chia sẻ không gian tên đó.


2
vui lòng thêm giải pháp trực tiếp tại đây và không phải là một liên kết bên ngoài có thể biến mất
Trẻ mồ côi

0

Như một vài người khác đã chỉ ra, điều này có thể được thay đổi cho các thùng chứa bằng cách sửa đổi config.v2.jsontệp.

Chỉ cần chắc chắn rằng dịch vụ Docker bị dừng trước khi tập tin được chỉnh sửa, nếu không nó sẽ bị QUÁ. Các bước PHẢI được thực hiện theo thứ tự này

  • Dừng container
  • Dừng dịch vụ Docker
  • Sửa đổi /var/lib/docker/containers/CONTAINER_ID/config.v2.jsontệp - -

  • Khởi động dịch vụ Docker

  • Bắt đầu container

Điều này đã được xác nhận làm việc cho tôi trên Docker v17.05.0-ce, trên một container sử dụng --net=host. Sửa đổi /etc/hostnametệp không hoạt động và tệp chỉ bị ghi đè.


-3

Trong

 /var/lib/docker/containers/CONTAINER/config.json

tìm và thiết lập

"Config":{"Hostname":"utils","Domainname":"mysite.com", ...}

Không hoạt động Docker version 17.05.0-ce, build 89658be. Cấu hình bị ghi đè, ai biết từ đâu. Và tên máy chủ không thay đổi sau khi khởi động lại.
dangonfast
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.