Установите Docker_Opts в centos

Мне нужно установить docker для прослушивания tcp://0.0.0.0/4243 на моей главной машине, работающей с amazon linux (centos). Вся документация, которую я видел, сказал мне запустить следующую команду

echo DOCKER_OPTS="-H=tcp://127.0.0.1:4243" >> /etc/default/docker

Что будет писать правильные docker_opts в /etc/default/docker. Я сделал это, но когда я перезапускаю докер, он не прослушивает 127.0.0.1

Я могу заставить докер работать правильно, набрав

sudo /usr/bin/docker -H tcp://0.0.0.0:4243 -d &

Это работает, но я хочу, чтобы опция по умолчанию прослушивалась на tcp://0.0.0.0: 4243 без необходимости указывать ее каждый раз.

Кажется, что докер полностью игнорирует мой файл /etc/default/docker, поэтому настройки игнорируются. Я также попытался записать файл в /etc/default/docker.io и/etc/default/docker-io (на самом деле не ожидал, что многое произойдет)

Мне нужно запустить docker с помощью

service docker start

или это вызовет проблемы в текущем учебнике по развертыванию.

Любые мысли о том, что я могу сделать, чтобы установить DOCKER_OPTS и не нужно делать это каждый раз, когда я перезапускаю докер?

Ответы

Ответ 1

В RHEL7 вместо изменения файла unit docker.service вы также можете просто отредактировать файл /etc/sysconfig/docker:

# /etc/sysconfig/docker

# Modify these options if you want to change the way the docker daemon runs
OPTIONS=--selinux-enabled -H unix:///var/run/docker.sock -H tcp://0.0.0.0:4243

а затем перезапустите службу докеров.

Для меня это более надежно, чем изменение службы script.

Ответ 2

Для CentOS 7 (RHEL 7):

Найти файл systemd docker.service. Шахта находится по адресу: /usr/lib/systemd/system/docker.service

В этом файле отредактируйте строку в разделе [Сервис], начиная с ExecStart=. Добавьте "-H tcp://0.0.0.0:4243" в строку. (обратите внимание на отсутствие "=" между -H и IP-адресом, как в вашей строке DOCKER_OPTS выше.)

В моей системе все содержимое docker.service выглядит следующим образом:

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/docker
ExecStart=/usr/bin/docker -d -H tcp://127.0.0.1:4243 -H fd:// $OPTIONS
LimitNOFILE=1048576
LimitNPROC=1048576

[Install]
Also=docker.socket

(Мне нужно, чтобы Docker прослушивал loopback, а не все IP-адреса.)

После внесения этого изменения в файл unit system и перезапуска службы Docker с помощью systemctl restart docker, я вижу следующий процесс:

root 8574 0.0 0.2 321708 10564 ? Ssl 00:42 0:00 /usr/bin/docker -d -H tcp://127.0.0.1:4243 -H fd:// --selinux-enabled

Как вы можете видеть, теперь он прослушивает настроенный TCP-адрес и будет продолжать перезагрузку и останавливать/запускать службу.

Ответ 3

Я не могу поверить, сколько ответов есть для этого. Итак, вот еще один для:

  • CentOS 7.3
  • Версия Docker = 17.03.1-ce, версия API = 1.27

Этот ответ построен на невероятной игры вокруг комбинации этого ответа, и этот один, и этот один.

  1. sudo vim/usr/lib/systemd/system/docker.service
  2. insert "-H tcp://0.0.0.0: 4243 -H unix:///var/run/docker.sock" enter image description here
  3. sudo systemctl daemon-reload//обновить ваши изменения файлов выше
  4. sudo systemctl перезапустить докер
  5. netstat -l | grep 4243//проверить, что порт открыт
  6. подключитесь к своему серверу докеров, где-то, например, Jenkins Docker Plugin, т.е. tcp://[server_ip]: 4243

Ответ 4

Редактирование /etc/docker/daemon.json кажется новым, поддерживаемым способом.

Ответ 5

С Docker 1.7.1 на CentOS 7 ни для меня не работали никакие модификации /usr/lib/systemd/system/docker.service или /etc/sysconfig/docker. Кажется, что в systemd устанавливает сокет, поэтому, чтобы изменить группу, вы должны отредактировать SocketGroup в /usr/lib/systemd/system/docker.socket

[Unit]
Description=Docker Socket for the API
PartOf=docker.service

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=jenkins

[Install]
WantedBy=sockets.target

Ответ 6

Я думаю о CentOS, вы можете попробовать установить параметры, как показано ниже, в файле /etc/sysconfig/docker

other_args="-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock"

Затем перезапустите докер и попробуйте проверить, открывается ли порт с помощью

netstat -plt | grep 4243 

Это должно отображаться при прослушивании

Ответ 7

Мне нужно было изменить модемный интерфейс docker0 по умолчанию, чтобы использовать мой собственный интерфейс моста br0 и поместив следующий контент в этот файл, решил мою проблему:

CentOS 7.2 и докер 1.10.3

/usr/lib/systemd/system/docker.service.d/docker.conf

[Service] 
ExecStart=
ExecStart=/usr/bin/docker daemon --bridge=br0 -H fd://

и, конечно же, необходимо выполнить следующее:

sudo systemctl daemon-reload

sudo systemctl restart docker 

ip link del docker0

Ответ 8

Это сработало для меня, когда я следил за тем, как его показано в сообщениях выше с файлами замены с заменой: /etc/systemd/system/docker.service.d

Ответ 9

Я работаю над centos 7.

Я просто хочу добавить insecure-registry в файл конфигурации docker, затем я изменил "DOCKER_OPTS = - insecure-registry =...." в /etc/sysconfig/docker, пока он не работал.

Пока я видел INSECURE_REGISTRY в конфиге, поэтому я изменил эту переменную и это WORKS!

Итак, я думаю, DOCKER_OPTS здесь не работает!

Но это сработало на моем unbuntu 14!

Это действительно неприятно при использовании докеров!

Ответ 10

На основе https://docs.docker.com/engine/admin/configuring/

sudo mkdir /etc/systemd/system/docker.service.d
sudo vi /etc/systemd/system/docker.service.d/docker.conf

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// -D -H tcp://127.0.0.1:4243

sudo systemctl daemon-reload
sudo systemctl restart docker

Ответ 11

1, отредактируйте /usr/lib/systemd/system/docker.service, чтобы добавить два параметра в раздел службы:

# vim /usr/lib/systemd/system/docker.service

[Service]

ExecStart =

ExecStart =/usr/bin/dockerd -H tcp://0.0.0.0: 2375 -H unix://var/run/docker.sock

2, перезагрузите конфигурацию и перезапустите докер.

# systemctl daemon-reload
# systemctl restart docker

3, чтобы проверить успех, посмотрите, возвращает ли ответ следующий.

# ps -ef|grep docker

root 26208 1 0 23:51? 00:00:00/usr/bin/dockerd -H tcp://0.0.0.0: 2375 -H unix://var/run/docker.sock

ссылка из Открыть Docker Remote API на Centos 7?

Ответ 12

Я считаю, что теперь все изменилось, этот ответ Брайан Огден работал для меня раньше, но сегодня не работал над моей средой, возможно, с обновленными версиями докера, ядра и ОС.

CentOS 7.4.1708 (on AWS)
Docker 17.03.2-ce
API 1.27

Это то, что работало после нескольких ударов и испытаний. Я не мог найти его документально нигде.

В файле /etc/systemd/system/docker.service.d/execstart.conf замените последний ExecStart (их два) ниже

ExecStart=/usr/bin/dockerd --graph=/var/lib/docker --storage-driver=overlay -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock

Теперь мои файлы выглядят так:

# cat /etc/systemd/system/docker.service.d/execstart.conf
[Service]
Restart=always
StartLimitInterval=0
RestartSec=15
ExecStartPre=-/sbin/ip link del docker0
ExecStart=
ExecStart=/usr/bin/dockerd --graph=/var/lib/docker --storage-driver=overlay -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
#

Однажды, вышеупомянутый файл будет изменен, просто выполните команду ниже, чтобы активировать изменения.

# systemctl daemon-reload && systemctl stop docker && rm -f /var/run/docker.sock && systemctl start docker

Чтобы проверить, все ли работает нормально, вы можете запускать любые (или все) команды ниже

# systemctl status docker.service | grep tcp
           ├─21812 /usr/bin/dockerd --graph=/var/lib/docker --storage-driver=overlay -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
#
# netstat -an | grep 4243
tcp6       0      0 :::4243                 :::*                    LISTEN
#
# ps aux | grep [4]243
root     21812  1.0  0.8 1017512 67876 ?       Ssl  15:11   0:06 /usr/bin/dockerd --graph=/var/lib/docker --storage-driver=overlay -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock
#
# docker -H :4243 info