Slayer
ага
Slayer
честно говоря он не в докере а в кубере
Slayer
но разницы особо нет
Slayer
клиентская машина только моск парит, по мануалу сертификат не принимает :(
Artyom
ага
Тебе нужно серт ещё пробрасывать в сам контейнер. А через переменные надо указывать, где именно в контейнере лежат серты/ключи
Artyom
https://medium.com/@ifeanyiigili/how-to-setup-a-private-docker-registry-with-a-self-sign-certificate-43a7407a1613
Вот здесь инфа поподробнее
Slayer
делаю вот так
Slayer
$ mkdir -p /etc/docker/certs.d/ip_address:5000
$ cp docker_reg_certs / domain.crt /etc/docker/certs.d/ip_address:5000/ca.crt
$ cp docker_reg_certs / domain.crt /usr/local/share/ca-certificates/ca.crt
$ update-ca-Certificates
Slayer
и все равно не работает, буду копать дальше
Artyom
А когда идёт
docker run
Artyom
То нужно:
REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -e REGISTRY_AUTH=htpasswd
Artyom
Предварительно настроив аутентифткацию/авторизацию, естественно
Artyom
В общем, вот эти переменные и файлы с сертами нужно вот взять и скормить в под/контейнер кубера
Slayer
да у меня пока все на этапе проверки реестра docker login reg.gitlab.dev.lan встало
Slayer
тут ещё и система хитрая, сам реестр без сертификата, его авторизацией управляет гитлаб - в него и прокинут сертификат
Artyom
Artyom
Я-то отдельно от него делал)
Artyom
Тогда в хранилище сертов гитлаба прокинь свой самоподписанный
Slayer
разобрался в чем дело, там ещё 1 сертификат на том же порту от другого сервиса, то 1 то 2й подкидывались, в логи заглянул и увидел ошибку
Slayer
мои эксперементы сказались :(
Ivan
Добрый вечер! У меня следующая проблема: Я установил Docker на Windows 10. Мне нужно настроить связь с daemon с TLS. Я сделал необходимые сертификаты, как в документации и прописал пути в daemon.json. Но при любых изменениях daemon.json получаю следующую ошибку: docker.core.httpwebresponse exception: {"status":"error","message":"exit status 1"} в docker.core.logging.httpclientexceptionintercept. Подскажите пожалуйста, в чем может быть причина?
Леннарт Zh 🕊
Кто-нибудь имеет опыт использования каких-нибудь "экзотических" storage drivers?
Мне нужно писать и читать много (300 тысяч) маленьких (50 ГБ всего) файлов.
И стоит ли?
Alexander
Добрый вечер. Подскажите на счет докера. А именно docker-compose.
1. Создал проект через docker-compose up -d
2. После этого все мои файлы получили права root и я не могу локально редактировать их.
3. Подскажите, как запускать docker-compose так, чтобы иметь возможность их потом локально редактировать?
Anonymous
1 сделать 777 права ну или типа того
2 https://docs.docker.com/engine/security/userns-remap/
3 https://docs.docker.com/engine/security/rootless/
Anonymous
4 запускать процесс в контейнере от нужного пользователя
Andrey
Коллеги, запускаю вот такой вот тест:
#include <iostream>
#include <memory.h>
int main() {
std::cout << "Hello, World!" << std::endl;
int i = 0;
void *mem;
do {
mem = malloc(1024 * 1024);
if (mem) {
i++;
std::cout << "Allocated: " << i << " Mb" << std::endl;
::memset(mem, 123, 1024 * 1024);
}
} while (mem);
std::cout << "No memory! " << std::endl;
return 0;
}
в докере, вот такой строчкой:
docker run --memory="100m" --memory-swappiness=0 --oom-kill-disable -it dbg
И при этом на 99-ом мегабайте она зависает, если без ключа --oom-kill-disable - то процесс нормально убивается.
Но мне бы хотелось поведения, когда malloc вернет NULL.
Как этого добиться?
Anonymous
а зачем ты утечки памяти добиваешься
Anonymous
Anonymous
Тогда реализация malloc будет возвращать NULL при достижении его. Почему не работает лимит через аргумент, вопрос хороший, но Java прошлых версий тоже знаменита тем, что в упор не замечала этот параметр и суицидально его пересекала.
Anonymous
Так что, вероятно, процесс просто не видит этого через самые простые POSIX-совместимые вызовы.
Anonymous
Коллеги, запускаю вот такой вот тест:
#include <iostream>
#include <memory.h>
int main() {
std::cout << "Hello, World!" << std::endl;
int i = 0;
void *mem;
do {
mem = malloc(1024 * 1024);
if (mem) {
i++;
std::cout << "Allocated: " << i << " Mb" << std::endl;
::memset(mem, 123, 1024 * 1024);
}
} while (mem);
std::cout << "No memory! " << std::endl;
return 0;
}
в докере, вот такой строчкой:
docker run --memory="100m" --memory-swappiness=0 --oom-kill-disable -it dbg
И при этом на 99-ом мегабайте она зависает, если без ключа --oom-kill-disable - то процесс нормально убивается.
Но мне бы хотелось поведения, когда malloc вернет NULL.
Как этого добиться?
По поводу того, что при пересечении лимитов указанных через namespaces типа пропускной способности, происходит pause, история вроде известная. Но почему так и для memory, не знаю. Вероятно чтобы не усложнять ничего. Возвращение NULL это задача реализации malloc, части системной библиотеки C, которая, вообще говоря, может быть своя у контейнера.
Anonymous
каких исследований? он в бесконечном цикле выделяет память
Anonymous
memset наверное -1 возвращает
Anonymous
а -1 все равно что истина
Anonymous
Если она ничего не знает о контейнеризации и не умеет общаться с ядром на эту тему, срабатывает более низкоуровневая защита и процесс замирает.
Anonymous
это ты ничего про язык не знаешь
Anonymous
Anonymous
и чувак выше тоже
Anonymous
я вообще на си не писал никогда и мне и то понятно, что там бесконечный цикл из-за того что memset -1 вернет, а -1 == true во всех языках
Anonymous
Там C++, бро.
Anonymous
без разницы
Anonymous
Но mem там это результат malloc
Anonymous
А memset выполняет декоративную функцию. Его вообще можно убрать
Anonymous
да там malloc
Anonymous
значит он -1 возвращает
Anonymous
Он должен возвращать NULL по ошибке
Anonymous
NULL это 0
Anonymous
https://man7.org/linux/man-pages/man3/malloc.3.html
Anonymous
Вот, почитай
Anonymous
void *malloc(size_t size);
If there is no available memory, malloc(), realloc(), memalign(), valloc(), and calloc() return a null pointer.
Anonymous
The malloc() and calloc() functions return a pointer to the allocated memory, which is suitably aligned for any built-in type. On error, these functions return NULL. NULL may also be returned by a successful call to malloc() with a size of zero, or by a successful call to calloc() with nmemb or size equal to zero.
Anonymous
By default, Linux follows an optimistic memory allocation strategy. This means that when malloc() returns non- NULL there is no guarantee that the memory really is available. In case it turns out that the system is out of memory, one or more processes will be killed by the OOM killer.21 мая 2013 г.
Anonymous
Anonymous
Anonymous
/proc/sys/vm/overcommit_memory This file contains the kernel virtual memory accounting mode. Values are: 0: heuristic overcommit (this is the default) 1: always overcommit, never check 2: always check, never overcommit In mode 0, calls of mmap(2) with MAP_NORESERVE are not checked, and the default check is very weak, leading to the risk of getting a process "OOM-killed". In mode 1, the kernel pretends there is always enough memory, until memory actually runs out. One use case for this mode is scientific computing applications that employ large sparse arrays. In Linux kernel versions before 2.6.0, any nonzero value implies mode 1.
Anonymous
Вот ещё системный тумблер
Anonymous
это ты ничего про язык не знаешь
Чувак, ты сколько программ на языках C/C++/Go/Rust за жизнь написал или поучаствовал в разработке? Мне просто интересно. Исследование эффекта избыточной уверенности при отсутствии знаний провожу.
Anonymous
на гоу штук 10
Anonymous
что это меняет
Anonymous
на сипупу хеллоуворлд писал лет десять назад
Anonymous
Да как бы тебе сказать. Чем лучше знаешь что-то, тем больше начинаешь сомневаться, что прав. Когда ничего не знаешь, наоборот, сомнений нет в принципе.
Anonymous
Кстати, про alpine:
❯ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 2 2 185.2MB 5.609MB (3%)
Containers 2 2 145B 0B (0%)
Local Volumes 3 3 41.39MB 0B (0%)
Build Cache 0 0 0B 0B
Anonymous
всего 5.6 мб образы занимают для такого композа:
❯ cat docker-compose.yml
version: '3.7'
services:
postgres:
image: postgres:alpine
restart: unless-stopped
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: 1
# POSTGRES_DB: db
volumes:
- postgres:/var/lib/postgresql/data
ports:
- '5432:5432'
networks:
- postgres
redis:
image: 'redis:alpine'
restart: unless-stopped
volumes:
- redis:/var/lib/redis
ports:
- '6379:6379'
networks:
- redis
volumes:
postgres:
redis:
networks:
postgres:
driver: bridge
redis:
driver: bridge
Anonymous
а если всякие дебианы использовать, то RECLAIMABLE гиг с лишним будет занимать
Anonymous
Andrey
/proc/sys/vm/overcommit_memory This file contains the kernel virtual memory accounting mode. Values are: 0: heuristic overcommit (this is the default) 1: always overcommit, never check 2: always check, never overcommit In mode 0, calls of mmap(2) with MAP_NORESERVE are not checked, and the default check is very weak, leading to the risk of getting a process "OOM-killed". In mode 1, the kernel pretends there is always enough memory, until memory actually runs out. One use case for this mode is scientific computing applications that employ large sparse arrays. In Linux kernel versions before 2.6.0, any nonzero value implies mode 1.
Да, вот оверкоммиты это ответ на вопрос заданный, спасибо
Сергей
простите, а можно как-то посмотреть через docker search все возможные теги образа?
Anonymous
Вероятно есть такая же с точностью до названия команда в оригинале
Anonymous
skopeo inspect docker://docker.io/fedora смотреть поле RepoTags
Сергей
спасибо
Anonymous
ERRO[0000] The storage 'driver' option must be set in /etc/containers/storage.conf, guarantee proper operation.
Anonymous
Можно просто использовать эту тулзу, она умеет работать и с докером.
Anonymous
Anonymous
что там должно быть
Anonymous
btrfs?
Anonymous
А btrfs есть вообще в системе?
Anonymous
Если нет, то нет