Peter
а кто сказал что правильно?
Peter
λ docker exec -it ubuntu-utf8 bash
root@0b7c1f2d449b:/# date
Thu May 18 09:23:17 UTC 2017
Peter
root@0b7c1f2d449b:/# locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Peter
вот локаль я поправил
Peter
COPY locale /etc/default/locale
RUN bla-bla \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y locales \
&& locale-gen en_US.UTF-8 \
&& DEBIAN_FRONTEND=noninteractive dpkg-reconfigure locales \
Alf 🙀
так и не могу уловить зачем.
Peter
поясняю, в postgresql вы имеете право поставть для базы collation тот, который доступен в системных локалях
Peter
если нужной локали нет, то и в postgresql её не будет
Alf 🙀
господи. зачем вы мне рассказываете что будет а что не будет. зачем вы ставите локаль в базе?
Peter
дык, для корректной работы поисков и сортировок, очевидно же
Avonar
Peter
и для возможности пихать в базу инфу в нужной кодировке
Avonar
просто как ей тогда пользоваться...
Peter
я аж призадумался от этого вопроса
Peter
вот выхлоп от сервера на его сборке
postgres=# SELECT name, setting FROM pg_settings WHERE category ~ 'Locale';
name | setting
----------------------------+--------------------
client_encoding | SQL_ASCII
DateStyle | ISO, MDY
default_text_search_config | pg_catalog.english
extra_float_digits | 0
IntervalStyle | postgres
lc_collate | C
lc_ctype | C
lc_messages | C
lc_monetary | C
lc_numeric | C
lc_time | C
server_encoding | UTF8
TimeZone | UTC
timezone_abbreviations | Default
(14 rows)
Peter
в вот как надо
name | setting
----------------------------+--------------------
client_encoding | UTF8
DateStyle | ISO, MDY
default_text_search_config | pg_catalog.english
extra_float_digits | 0
IntervalStyle | postgres
lc_collate | en_US.UTF-8
lc_ctype | en_US.UTF-8
lc_messages | en_US.UTF-8
lc_monetary | en_US.UTF-8
lc_numeric | en_US.UTF-8
lc_time | en_US.UTF-8
server_encoding | UTF8
TimeZone | W-SU
timezone_abbreviations | Default
(14 rows)
Alf 🙀
так а чем вас с не устраивают? у вас там китайский?
Alf 🙀
Peter
Русский, в том числе
Alf 🙀
Alexey
Alf 🙀
я конечно могу ошибаться, но похоже постгре умеет локали на уровне дб (неожиданно)
https://www.postgresql.org/docs/9.3/static/multibyte.html
The default character set is selected while initializing your PostgreSQL database cluster using initdb. It can be overridden when you create a database, so you can have multiple databases each with a different character set.
Alexey
Мне кажется это проблема в имидже, это дикость какая то собирать образ с ansii
Peter
Peter
Avonar
SCRIPT
вот мой докер билд # Version: 0.0.1
FROM python:2.7-alpine
MAINTAINER djtimone <timonefm@gmail.com>
RUN pip install —upgrade pip
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
#EXPOSE 80
COPY example.py /app/
COPY teranicouture.py /app/
COPY src /app/
COPY instaserver.sh /app/
WORKDIR /app
CMD ["/app/instaserver.sh"]
SCRIPT
докерфайл
SCRIPT
запускаю на сервере docker run работает только один
SCRIPT
апп
SCRIPT
а нужно что бы работало 2
SCRIPT
root@143695:~# docker run djtimone/instaserver
Instabot v1.1.0 started at 18.05.2017 15:11:
Anonymous
почему с таким докерфайлом
ENTRYPOINT ansible-playbook
CMD ["-M", "/root/deploy", "/root/deploy/deploy.yml" ]
мне выдаёт, что container_linux.go:247: starting container process caused "exec: \"-M\": executable file not found in $PATH"?
Anonymous
такое тоже не работало:
ENTRYPOINT ["ansible-playbook"]
CMD ["-M", "/root/deploy", "/root/deploy/deploy.yml" ]
Peter
а скажите-ка, systemd в контейнерах работает или фигос?
Anonymous
он на dbus завязан, поэтому корявенько работает
Peter
да, это я из академического интереса
Peter
дёрнул в контейнере timedatectl
Anonymous
Alexey
Насколько я понимаю одновременно ENTRYPOINT и CMD ставят только тогда, когда для ENTRYPOINT не передаются аргументы. поправьте если я ошибаюсь. Поэтому они не работают вместе...
Alexey
т.е. в этом случае ентрипоинт используется как конфигурационный скрипт запускаемый перед основным процессом. Выше по постгресу я давал ссылку, там как раз так используется.
Anonymous
https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact
Anonymous
подозреваю, что бага
Anonymous
а вот так вот взлетело: docker run --entrypoint ansible-playbook deployer -M /root/deploy /root/deploy/deploy.yml
Alexey
подозреваю, что бага
Да нет :)
Там в таблице даже написаны примеры. Поставьте значение энтрипоинт в квадратные скобки
Anonymous
так и сделал. он мне при сборке вообще ENTRYPOINT игнорит, я сейчас внимательней глянул
Anonymous
то есть, сначала завершается шаг RUN, пропускается ENTRYPOINT и наворачивается после этого CMD
Alf 🙀
Anonymous
лол. кароч RUN не понял закомментированный решёткой \
Sander
Всем привет
Sander
https://github.com/moby/moby
что за Moby Project?
Anonymous
теперь так называется докер для коммунити. докер для энтерпрайза останется просто докером
Sander
понятно
Sander
я думал что-то новое сделали
Alex
Ребят, есть питонисты? Как в контейнере получить хост или ip хост машины ?
Alex
средствами питона разумеется
Sergei
не уверен что это тривиальная задача - не проще ли передавать через env ip адрес хост машины при создании контейнера
Vladimir
как я понял, moby - это тулза для сборки дистрибутивов ос, внутри которых будут крутиться контейнеры
Vladimir
в readme в разделе overview более подробно написано про это
Peter
а как-то можно получить лист tag'ов нужного имиджа из docker hub?
Peter
Пока так и не понимаю как правильно обойтись с timezone.
Допустим, мне нужно крутить несколько контейнеров в разных timezone, следовательно, вариант пробросить /etc/localtime с хоста в контейнер отпадает. Дальше, опять, несколько вариантов.
Делать в контейнере правильную timezone примерно так
RUN ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime \
&& DEBIAN_FRONTEND=noninteractive dpkg-reconfigure -f noninteractive tzdata
Или же пускать контейнер как
docker run bla-bla -e TZ=Europe/Moscow
или любая другая timezone.
Но тут у меня вопросы все ли процессы будут правильно понимать это? bash в контейнере время показывает нужное.
Но /etc/localtime же фиг знает какой и /etc/timezone тоже
Alf 🙀
Peter
Я уже собрал, но хочу прояснить
Alexey
Пока так и не понимаю как правильно обойтись с timezone.
Допустим, мне нужно крутить несколько контейнеров в разных timezone, следовательно, вариант пробросить /etc/localtime с хоста в контейнер отпадает. Дальше, опять, несколько вариантов.
Делать в контейнере правильную timezone примерно так
RUN ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime \
&& DEBIAN_FRONTEND=noninteractive dpkg-reconfigure -f noninteractive tzdata
Или же пускать контейнер как
docker run bla-bla -e TZ=Europe/Moscow
или любая другая timezone.
Но тут у меня вопросы все ли процессы будут правильно понимать это? bash в контейнере время показывает нужное.
Но /etc/localtime же фиг знает какой и /etc/timezone тоже
да, если контейнеров будет много, а имидж один, то просто передавайте через -e ...
Саму таймзону, если просто передача -e TZ=Europe/Moscow не решает вашу проблему, в контейнере может конфигурировать entrypoint.sh который будет запускаться брать env переменную и выполнять с ней указанную вами команду.
E
E
именно так и сделал
E
https://gist.github.com/adastreamer/33d7e747d893608fbbc6cdeddc7404a0
E
ну задача другая, но суть такая же
E
удобно, когда надо делать какой-то сетап не только при запуске заранее приготовленной CMD, а когда, например, надо что-то выполнять при выполнении кастомной команды
E
во огонь
хотел ответить на следующее собщение 😊