NetworkManager не может переключить точку доступа :Ошибка активации соединения

То, как выполняется контейнер, зависит от того, как он был создан. В билдере Dockerfileмогут быть варианты CMDи ENTRYPOINT.

Например, вот контейнер, который никогда не вызывает /bin/sh.

Во-первых, программа, которую мы хотим запустить. Я написал это в goтолько потому, что это легко продемонстрировать.

$ cat small.go 
package main

import "fmt"
import "os"

func main() {
  fmt.Println("Hello")
  fmt.Print("You entered ")
  fmt.Println(os.Args[1:])
}

$ go build small.go

Теперь инструкция по сборке контейнера:

$ cat Dockerfile 
FROM scratch
ADD small /
ENTRYPOINT ["/small"]

$ docker build -t small.
Sending build context to Docker daemon  1.642MB
Step 1/3 : FROM scratch
 ---> 
Step 2/3 : ADD small /
 ---> Using cache
 ---> 6171cecbf91b
Step 3/3 : ENTRYPOINT ["/small"]
 ---> Using cache
 ---> 14af8187a035
Successfully built 14af8187a035
Successfully tagged small:latest

А теперь запускаем контейнер:

$ docker run --rm small some options passed
Hello
You entered [some options passed]

На самом деле этот контейнер содержит только один файл, программу smallи больше ничего! Ни оболочки, ни библиотек, ничего.

Теперь образ докера, на который вы смотрите, попадет в python, если вы запустите его правильно и не передадите никаких параметров

$ docker run --rm -it python:2.7-slim
Python 2.7.16 (default, Mar 27 2019, 09:57:44) 
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Если мы посмотрим на изображение, то увидим...

$ docker inspect python:2.7-slim
...
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"python2\"]"
            ],

Итак, мы видим, что он был построен с опцией CMDв Dockerfile. Это говорит ему, что команда по умолчанию должна выполняться, если никакая другая команда не передается вызову docker run.

Таким образом, с этим контейнером он будет работать python, если ему не будет предложено запустить что-либо еще.

Это означает, что мы можем делать такие забавные вещи, как

$ echo 'print("hello")' | docker run --rm -i python:2.7-slim
hello
0
28.04.2020, 19:57
1 ответ

Сетевой менеджер предназначен для управления сетями, он имеет логику для переключения сетей в зависимости от их доступности. когда вы запускаете первый сценарий и удаляете его, демон сетевого менеджера, вероятно, замечает и подключается к тому, что доступно по умолчанию.

Во-вторых, вы перемещаете файлы, которые сообщают сетевому менеджеру, к каким точкам доступа Wi-Fi он должен подключаться. Поэтому, когда у него есть домашний файл, он сможет подключиться только к дому, потому что это единственная сеть, о которой он знает. Когда у него есть файл iot, он сможет подключиться только к iot.

Он не переключится, потому что диспетчер сети не знает о существовании другого. Лучший способ решить вашу проблему — установить приоритет для SSID в диспетчере сети или использовать «nmcli device wifi connect», который должен работать для подключения к другому SSID без его отключения. Если не эта команда, справочные страницы nmcli должны быть полезны, чтобы выяснить, как это сделать.

1
19.03.2021, 02:21

Теги

Похожие вопросы