Error while parsing cannot run program docker compose

This error appears randomly when I'm working with docker-compose on Windows 10, sometimes after pycharm already working with docker-compose as interpreter. I tried: Make sure docker-compose file is

This error appears randomly when I’m working with docker-compose on Windows 10, sometimes after pycharm already working with docker-compose as interpreter.
I tried:

  • Make sure docker-compose file is valid, without tabs instead of spaces.

  • Use yml and yaml suffixes (sometimes yaml works and yml doesn’t, sometimes both are working or not working)

  • Add project-compose to configuration files.

Problem is ‘solved’ just after rebooting, and then happened again.

asked Apr 30, 2020 at 9:24

Noyah's user avatar

Linux here

tl;dr: same solution as for windows

  1. check path to docker-compose executable:

    ➤ which docker-compose
    /home/voy/.pyenv/shims/docker-compose
    
  2. Go to File | Settings | Build, Execution, Deployment | Docker | Tools | Docker Compose Executable and paste docker compose executable path from above

    linux is better

  3. Restart pycharm

answered Aug 17, 2020 at 13:03

voy's user avatar

voyvoy

1,4582 gold badges16 silver badges27 bronze badges

0

Here is a JetBrains issue about this:
https://youtrack.jetbrains.com/issue/WI-49652

And another post:
https://intellij-support.jetbrains.com/hc/en-us/community/posts/360000129510-Couldn-t-refresh-skeletons-for-remote-interpreter-Docker

  1. They suggest multiple things, first I had to change the docker-compose executable path, as PyCharm found the docker-compose.txt first, I needed to set it to docker-compose.exe.
    enter image description here
  1. After this the problem still occured from time to time, but restarting PyCharm fixed it. Though it takes for a few minutes to index everything and reload the project.

  2. Line endings can also be an issue, if in the docker-compose.yml set to use CRLF instead of LF, that can be a cause to fail parsing as well. I suggest to use a .editorconfig file to control your line endings, that seemed to help as well. Also setting your git autocrlf to ‘input’ might help if you use Windows.

  3. Slowest one is posted on the forum:

  • remove pycharm helper containers: $ docker rm -f $(docker ps -a | grep pycharm_helper | awk '{print $1}')
  • invalidate caches and restart PyCharm

No a great solutions yet as I know, unfortunately.

answered Aug 5, 2020 at 8:35

Agnes Kis's user avatar

Agnes KisAgnes Kis

4913 silver badges6 bronze badges

1

Содержание

  1. Ошибки Docker
  2. Введение
  3. Bind for 0.0.0.0:80 failed: port is already allocated.
  4. the input device is not a TTY
  5. ls: cannot access
  6. Got permission denied
  7. unable to prepare context: context must be a directory
  8. docker.io : Depends: containerd
  9. Самые распространённые ошибки при работе с Docker
  10. Требования
  11. 1: Ошибки в Dockerfile
  12. 2: Конфликты имён
  13. 3: Проблемы взаимодействия контейнеров
  14. Заключение

Ошибки Docker

Введение

В этой статье вы можете найти ошибки с которыми я встретился при работе с Docker

Инструкции по работе с Docker можете прочитать здесь и здесь

Bind for 0.0.0.0:80 failed: port is already allocated.

docker: Error response from daemon: driver failed programming external connectivity on endpoint web (8b4ccb280aa958668c714013462f1a84334118d41bbd5505e7bfdc23331c2ce5): Bind for 0.0.0.0:80 failed: port is already allocated.

Скорее всего у Вас уже запущен контейнер который слушает порт 80

Посмотрите какой контейнер из тех что Up использует порт 80 — это видно в столбце PORTS

Остановите его командой

docker stop имя_контейнера

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

docker: Error response from daemon: driver failed programming external connectivity on endpoint quirky_khayyam (ee99ee75b322c083c0f2e34395785fa23d2217a7f21fb62c6acf9d6f10ffd68b): Error starting userland proxy: listen tcp4 0.0.0.0:5000: bind: address already in use.

the input device is not a TTY

the input device is not a TTY. If you are using mintty, try prefixing the command with ‘winpty’

Скорее всего вы пытаетесь запустить, например, ubuntu в docker под Windows . Например

docker exec -it myubuntu bash

Попробуйте последовать совету и выполнить

winpty docker exec -it myubuntu bash

ls: cannot access

ls: cannot access ‘C:/Program Files/Git/’: No such file or directory

Скорее всего у вас запущен, например, ubuntu в docker под Windows и вы пытаетесь выполнить какую-то команду внутри контейнера используя /

docker exec myubuntu ls /

docker exec myubuntu cat /data.txt

Попробуйте выполнить без /

docker exec myubuntu ls

docker exec myubuntu cat data.txt

Got permission denied

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied. See ‘docker run —help’.

Возможно, пользователь который запускает docker run не состоит в группе docker.

Проверить есть ли группа docker можно командой

andrei adm cdrom sudo dip plugdev lpadmin lxd sambashare docker

Если группа docker уже есть — переходите к следующему шагу. Если её нет — создайте командой

sudo groupadd docker

Нужно добавить пользователя в группу docker командой

sudo usermod -aG docker username

Осталось только перелогиниться и всё должно заработать

Если не помогло — выполните дополнительно

Подробнее про администрирование пользователей и групп в Linux читайте в статье «Пользователи Linux»

unable to prepare context: context must be a directory

unable to prepare context: context must be a directory: /home/andrei/docker/Dockerfile

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

Пример правильного указания докерфайла с помощью опции -f

docker build -t andrei-debian:1.0 -f Dockerfile-debian .

Подробности о сборке контейнеров читайте в статье docker build

debconf: unable to initialize frontend: Dialog debconf: (TERM is not set, so the dialog frontend is not usable.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can’t locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.30.0 /usr/local/share/perl/5.30.0 /usr/lib/x86_64-linux-gnu/perl5/5.30 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.30 /usr/share/perl/5.30 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7, <> line 18.) debconf: falling back to frontend: Teletype dpkg-preconfigure: unable to re-open stdin:

Configuring tzdata —————— Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities, representing the time zones in which they are located. 1. Africa 6. Asia 11. System V timezones 2. America 7. Atlantic Ocean 12. US 3. Antarctica 8. Europe 13. None of the above 4. Australia 9. Indian Ocean 5. Arctic Ocean 10. Pacific Ocean Geographic area:

После ввода зависает

docker.io : Depends: containerd

При попытке установить Docker в Ubuntu

sudo apt install docker.io

Reading package lists. Done Building dependency tree Reading state information. Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: docker.io : Depends: containerd (>= 1.2.6-0ubuntu1

) E: Unable to correct problems, you have held broken packages.

Нужно обновить apt и установить containerd

sudo apt -y update
sudo apt -y upgrade
sudo apt -y install containerd

Reading package lists. Done Building dependency tree Reading state information. Done The following additional packages will be installed: runc The following packages will be REMOVED: containerd.io docker-ce The following NEW packages will be installed: containerd runc 0 upgraded, 2 newly installed, 2 to remove and 0 not upgraded. Need to get 36.9 MB of archives. After this operation, 45.6 MB disk space will be freed. Get:1 http://fi.archive.ubuntu.com/ubuntu focal-updates/main amd64 runc amd64 1.1.0-0ubuntu1

20.04.1 [3,892 kB] Get:2 http://fi.archive.ubuntu.com/ubuntu focal-updates/main amd64 containerd amd64 1.5.9-0ubuntu1

20.04.4 [33.0 MB] Fetched 36.9 MB in 5s (7,316 kB/s) (Reading database . 254483 files and directories currently installed.) Removing docker-ce (5:20.10.18

ubuntu-focal) . Warning: Stopping docker.service, but it can still be activated by: docker.socket Removing containerd.io (1.6.8-1) . Selecting previously unselected package runc. (Reading database . 254461 files and directories currently installed.) Preparing to unpack . /runc_1.1.0-0ubuntu1

20.04.1_amd64.deb . Unpacking runc (1.1.0-0ubuntu1

20.04.1) . Selecting previously unselected package containerd. Preparing to unpack . /containerd_1.5.9-0ubuntu1

20.04.4_amd64.deb . Unpacking containerd (1.5.9-0ubuntu1

20.04.4) . Setting up runc (1.1.0-0ubuntu1

20.04.1) . Setting up containerd (1.5.9-0ubuntu1

20.04.4) . Processing triggers for man-db (2.9.1-1) .

Источник

Самые распространённые ошибки при работе с Docker

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

Данное руководство по устранению неполадок предназначено для новичков Docker. Руководство поможет вам устранить проблемы при сборке образов и настройке соединений между контейнерами.

Требования

Для выполнения руководства нужно предварительно установить приложение Docker. Инструкции по установке можно найти по ссылкам:

1: Ошибки в Dockerfile

Наибольшее количество ошибок обычно сосредоточено в Dockerfile.

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

Образ Docker – это ресурс, предназначенный только для чтения, который создаётся с помощью файла под названием Dockerfile. Образы можно выкладывать на Docker Hub.

Контейнер – это экземпляр приложения, который создаётся с помощью образа.

Dockerfile подробно описывает пошаговый процесс, с помощью которого Docker создаёт образ. Каждая строка в Dockerfile описывает один из этапов процесса. Таким образом, если Docker переходит на новый этап, значит, предыдущие этапы выполнены без ошибок.

Создайте небольшой проект, чтобы на его примере рассмотреть несколько общих ошибок Dockerfile. Создайте каталог docker_image в домашнем каталоге. Затем создайте в нём Dockerfile.

Добавьте в файл такие строки:

# base image
FROM debian:latest
# install basic apps
RUN aapt-get install -qy nano

В этом файле специально сделана опечатка. Можете её найти? Попробуйте создать образ с помощью этого файла и посмотрите, что скажет Docker.

docker build -t my_image

Step 2 : RUN aapt-get install -qy nano
—> Running in 085fa10ffcc2
/bin/sh: 1: aapt-get: not found
The command ‘/bin/sh -c aapt-get install -qy nano’ returned a non-zero code: 127

Из этого сообщения об ошибке следует, что во второй команде допущена ошибка. Как уже говорилось, это сделано намеренно: вместо команды apt-get в файле указана команда aapt-get. Первый этап выполнен без ошибок, а на втором Docker обнаруживает опечатку.

Исправьте опечатку в Dockerfile:

# install basic apps
RUN apt-get install -qy nano

Снова запустите docker build:

docker build -t my_image

Sending build context to Docker daemon 2.048 kB
Step 1 : FROM debian:latest
—> ddf73f48a05d
Step 2 : RUN apt-get install -qy nano
—> Running in 9679323b942f
Reading package lists.
Building dependency tree.
E: Unable to locate package nano
The command ‘/bin/sh -c apt-get install -qy nano’ returned a non-zero code: 100

Теперь процесс проходил немного быстрее: Docker кэширует удачно выполненные этапы, чтобы потом не перевыполнять их. Однако потом возникла новая ошибка.

Дистрибутив Debian, на котором основан образ, не может найти текстовый редактор nano, хотя он точно доступен в репозитории Debian. Базовый образ собирается из кэшированных метаданных: репозиториев и списков доступных пакетов. Вероятно, при кэшировании произошла ошибка.

Чтобы исправить её, отредактируйте Dockerfile и добавьте в него чистку и обновление исходных файлов перед установкой новых пакетов:

Добавьте в файл такую строку:

# base image
FROM debian:latest
# clean and update sources
RUN apt-get clean && apt-get update
# install basic apps
RUN apt-get install -qy nano

Сохраните и закройте файл. Запустите docker build:

docker build -t my_image

Теперь процесс будет выполнен успешно:

Sending build context to Docker daemon 2.048 kB
Step 1 : FROM debian:latest
—> a24c3183e910
Step 2 : RUN apt-get install -qy nano
—> Running in 2237d254f172
Reading package lists.
Building dependency tree.
Reading state information.
Suggested packages:
spell
The following NEW packages will be installed:
nano
.
—> 64ff1d3d71d6
Removing intermediate container 2237d254f172
Successfully built 64ff1d3d71d6

Добавьте в образ Python 3 и базу данных PostgreSQL. Откройте Dockerfile:

Вставьте такие строки:

# base image
FROM debian:latest
# clean and update sources
RUN apt-get clean && apt-get update
# install basic apps
RUN apt-get install -qy nano
# install Python and modules
RUN apt-get install -qy python3
RUN apt-get install -qy python3-psycopg2

Сохраните и закройте файл. Соберите образ.

docker build -t my_image

Как видите, все пакеты установлены без ошибок. Кроме того, процесс выполняется очень быстро, поскольку большинство его этапов помещено в кэш.

Sending build context to Docker daemon 2.048 kB
Step 1 : FROM debian:latest
—> ddf73f48a05d
Step 2 : RUN apt-get clean && apt-get update
—> Using cache
—> 2c5013476fbf
Step 3 : RUN apt-get install -qy nano
—> Using cache
—> 4b77ac535cca
Step 4 : RUN apt-get install -qy python3
—> Running in 93f2d795fefc
Reading package lists.
Building dependency tree.
Reading state information.
The following extra packages will be installed:
krb5-locales libgmp10 libgnutls-deb0-28 libgssapi-krb5-2 libhogweed2
libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libldap-2.4-2 libnettle4
libp11-kit0 libpq5 libsasl2-2 libsasl2-modules libsasl2-modules-db
libtasn1-6
Suggested packages:
gnutls-bin krb5-doc krb5-user libsasl2-modules-otp libsasl2-modules-ldap
libsasl2-modules-sql libsasl2-modules-gssapi-mit
libsasl2-modules-gssapi-heimdal python-psycopg2-doc
The following NEW packages will be installed:
krb5-locales libgmp10 libgnutls-deb0-28 libgssapi-krb5-2 libhogweed2
libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libldap-2.4-2 libnettle4
libp11-kit0 libpq5 libsasl2-2 libsasl2-modules libsasl2-modules-db
libtasn1-6 python3-psycopg2
0 upgraded, 18 newly installed, 0 to remove and 0 not upgraded.
Need to get 5416 kB of archives.
After this operation, 10.4 MB of additional disk space will be used.
.
Processing triggers for libc-bin (2.19-18+deb8u6) .
—> 978e0fa7afa7
Removing intermediate container d7d4376c9f0d
Successfully built 978e0fa7afa7

Примечание: Docker кэширует процесс сборки. Потому иногда при сборке образа используются устаревшие исходные файлы. Чтобы избежать этого, добавьте в Dockerfile чистку и обновление исходников. Если при установке или обновлении пакетов возникает ошибка, запустите внутри контейнера команду:

apt-get clean && apt-get update

Внимательно читайте вывод Docker, чтобы отследить опечатки. Своевременно обновляйте исходные файлы, чтобы избежать ошибок, вызванных кэшированными списками пакетов.

Синтаксические ошибки и ошибки кэширования – наиболее распространенные проблемы, с которыми вы можете столкнуться при создании образа Docker. Теперь давайте рассмотрим проблемы, которые могут возникнуть при работе с контейнерами, созданными на основе этих образов.

2: Конфликты имён

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

К примеру, иногда при создании контейнера пользователи пытаются использовать имя, которое ранее было присвоено другому контейнеру в этой системе. Данный раздел научит вас выбирать имена для контейнеров, переименовывать и удалять их, чтобы устранить конфликт имён.

Используйте созданный ранее образ, чтобы запустить контейнер. Затем, чтобы протестировать его работу, запустите интерактивный интерпретатор bash внутри этого контейнера.

docker run -ti my_image bash

После запуска контейнера вы увидите командную строку root:

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

Запуская контейнер так, как показано выше, не указывая имя, Docker присваивает ему случайное имя. Чтобы просмотреть список запущенных контейнеров, запустите на хосте Docker команду:

Примечание: Команду нужно запускать вне контейнера.

Откройте терминал хоста Docker и запустите:

Эта команда выведет список запущенных контейнеров:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80a0ca58d6ec my_image «bash» 22 seconds ago Up 28 seconds loving_brahmagupta

Как видите, Docker выбрал для только что запущенного контейнера случайное имя, и в данном случае это loving_brahmagupta (вероятно, в вашем случае имя будет отличаться). Позволять Docker присваивать контейнерам случайные имена можно в некоторых простых случаях. Однако это может повлечь серьёзные проблемы. При развёртывании объемного проекта нужно присвоить контейнерам имена самостоятельно, чтоб иметь возможность ссылаться на них и автоматизировать их работу.

Чтобы задать имя контейнера, используйте при запуске аргумент –name. Также вы можете переименовать запущенный контейнер. Имя контейнера должно быть описательным.

Запустите следующую команду в терминале хоста Docker:

docker rename your_container_name python_box

Запросите список контейнеров:

Теперь контейнер loving_brahmagupta называется python_box:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80a0ca58d6ec my_image «bash» 24 minutes ago Up 24 minutes python_box

Чтобы закрыть контейнер, введите exit в командную строку:

Также контейнер можно остановить с помощью команды kill из другого терминала хоста Docker:

docker kill python_box

В таком случае Docker возвращает имя остановленного контейнера:

Чтобы убедиться, что контейнер python_box остановлен, запросите список контейнеров:

Контейнер python_box в списке нет:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Вы думаете, что теперь можно запустить другой контейнер с именем python_box? Что ж, попробуйте сделать это:

docker run —name python_box -ti my_image bash
docker: Error response from daemon: Conflict. The name «/python_box» is already in use by container 80a0ca58d6ecc80b305463aff2a68c4cbe36f7bda15e680651830fc5f9dda772. You have to remove (or rename) that container to be able to reuse that name..
See ‘docker run —help’.

Если вы собираете образ, а затем хотите повторно использовать имя существующего образа, этот образ будет переписан. Контейнеры работают немного сложнее: вы не можете переписать существующий контейнер.

Итак, Docker говорит, что контейнер python_box уже существует, хотя только что этот контейнер был остановлен. Его даже нет в списке команды docker ps. Да, на данный момент он не запущен, но он всё ещё доступен. Вы остановили, но не удалили его. Команда docker ps показывает не все доступные, а только запущенные контейнеры.

Чтобы запросить список всех контейнеров, нужно добавить флаг –а:

Как видите, python_box всё-таки в списке:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80a0ca58d6ec my_image «bash» 12 minutes ago Exited (137) 6 minutes ago python_box

Контейнер существует, его состояние – Exited (137). Потому пока что вы не можете создать контейнер с таким же именем: для этого нужно удалить контейнер.

Чтобы сделать это, введите в терминал:

docker rm python_box

Docker выведет на экран имя удалённого контейнера.

Примечание: Если контейнер, который нужно удалить, всё ещё запущен, команда не сможет удалить его и вернёт ошибку.

Теперь попробуйте снова создать контейнер по имени python_box:

docker run —name python_box -ti my_image bash

Процесс будет успешно выполнен, а на экране появится оболочка root:

Теперь остановите и удалите этот контейнер, чтобы избежать ошибок при дальнейшей работе. Откройте новый терминал на хосте Docker и выполните команду:

docker kill python_box && docker rm python_box

Эта команда состоит из двух команд, потому Docker выведет имя контейнера дважды:

При возникновении конфликтов имён используйте команду docker ps -a

Самостоятельно присваивая имена контейнерам, вы можете легко управлять инфраструктурой. Кроме того, так гораздо проще устанавливать взаимодействие между контейнерами.

3: Проблемы взаимодействия контейнеров

Докер может легко обрабатывать несколько контейнеров, благодаря чему вы можете запускать различные сервисы и даже дублировать сервисы в контейнерах. Если с одним из сервисов случился сбой или его взломали, вы можете просто заменить его другим, сохраняя при этом остальную часть инфраструктуры нетронутой. Но вы можете столкнуться с проблемами при настройке взаимодействия между этими контейнерами.

Создайте два взаимодействующих между собой контейнера: пусть первый будет контейнером Python на основе уже существующего образа, а второй будет запускать PostgreSQL.

Примечание: Официальный образ для контейнера PostgreSQL можно найти на Docker Hub.

Сначала создайте контейнер PostgreSQL. Присвойте ему имя с помощью аргумента –name (например, postgres_box).

Прежде контейнеры запускались на переднем плане, занимая терминал. Теперь нужно запустить контейнер PostgreSQL в фоновом режиме. Для этого используется флаг –detach.

Вместо команды bash запустите в контейнере команду postgres, которая запустит сервер баз данных PostgreSQL.

docker run —name postgres_box —detach postgres

Docker загрузит образ с Docker Hub и создаст контейнер. Затем он вернёт полный ID контейнера, запущенного в фоновом режиме:

Unable to find image ‘postgres:latest’ locally
latest: Pulling from library/postgres
6a5a5368e0c2: Already exists
193f770cec44: Pull complete
.
484ac0d6f901: Pull complete
Digest: sha256:924650288891ce2e603c4bbe8491e7fa28d43a3fc792e302222a938ff4e6a349
Status: Downloaded newer image for postgres:latest
f6609b9e96cc874be0852e400381db76a19ebfa4bd94fe326477b70b8f0aff65

Просмотрите список запущенных контейнеров:

В списке вы увидите запущенный в фоновом режиме контейнер postgres_box, который использует порт 5432 (стандартный порт PostgreSQL)

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a230b56cd64 postgres_box «/docker-entrypoint.s» Less than a second ago Up 2 seconds 5432/tcp postgres

Теперь запустите контейнер Python. Чтобы программы внутри контейнера Python могли видеть сервисы внутри контейнера postgres_box, нужно вручную связать эти контейнеры с помощью флага –link.

Чтобы создать ссылку, нужно указать имя контейнера, а затем, после флага –link, задать имена контейнеров, которые нужно связать. В данном случае команда будет выглядеть так:

docker run —name python_box —link postgres_box:postgres -ti my_image bash

Попробуйте подключиться к PostgreSQL из контейнера python_box.

Ранее вы установили nano в python_box. Используйте этот текстовый редактор, чтобы создать простой сценарий Python и подключиться к PostgreSQL. В терминал контейнера python_box введите:

root@3053f74c8c13: / # nano pg_test.py

Добавьте в файл:

«»»Test PostgreSQL connection.»»»
import psycopg2
conn = psycopg2.connect(user=’postgres’)
print(conn)

Сохраните и закройте файл. Попробуйте подключиться к БД с помощью этого сценария:

root@3053f74c8c13: / # python3 pg_test.py

В выводе говорится о том, что во время подключения произошла ошибка:

Traceback (most recent call last):
File «pg_test.py», line 5, in
conn = psycopg2.connect(database=»test», user=»postgres», password=»secret»)
File «/usr/lib/python3/dist-packages/psycopg2/__init__.py», line 164, in connect
conn = _connect(dsn, connection_factory=connection_factory, async=async)
psycopg2.OperationalError: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket «/var/run/postgresql/.s.PGSQL.5432»?

Итак, контейнер postgres_box запущен и связан с python_box. В чём же проблема? Дело в том, что во время соединения не был указан хост БД, потому Python пытается подключиться к ней локально. Но это не сработает, так как сервис запущен не локально – он работает в другом контейнере, а это то же самое, что на другом компьютере.

Вы можете получить доступ к связанным контейнерам, указав имя, использованное в ссылке. В данном случае мы используем postgres для ссылки на контейнер postgres_box, который запускает сервер базы данных. Вы можете убедиться в этом, просмотрев файл /etc/hosts внутри контейнера python_box:

root@3053f74c8c13: / # cat /etc/hosts

Вы увидите все доступные хосты, их имена и IP. Сервер postgres тоже в списке:

127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 postgres f6609b9e96cc postgres_box
172.17.0.3 3053f74c8c13

Отредактируйте сценарий Python и добавьте в него имя хоста. Откройте файл:

root@3053f74c8c13: / # nano pg_test.py

Укажите имя хоста:

«»»Test PostgreSQL connection.»»»
import psycopg2
conn = psycopg2.connect(host=’postgres’, user=’postgres’)
print(conn)

Сохраните и закройте файл. Снова запустите сценарий:

root@3053f74c8c13: / # python3 pg_test.py

Теперь сценарий выполнен успешно:

Запоминайте имена контейнеров, чтобы иметь возможность подключаться к сервисам внутри этих контейнеров.

Заключение

В данном руководстве мы рассмотрели наиболее распространенные проблемы, с которыми можно столкнуться при работе с контейнерами Docker: от создания образов и до развертывания сетей контейнеров.

Docker предоставляет флаг –debug. В основном этим флагом пользуются разработчики Docker. Однако если вы хотите узнать больше о внутреннем строении Docker, попробуйте запустить команды Docker в режиме отладки (это вернёт более подробный вывод):

docker -D [command] [arguments]

Контейнеры программного обеспечения существуют уже некоторое время, а сама система Docker – всего три года, потому иногда с ней бывает сложно. Чем чаще вы будете работать с Docker, тем больше у вас будет опыта: вы будете знать подводные камни, научитесь быстро справляться с рутинными задачами и устранять ошибки.

Источник

Всем привет. Пытаюсь запустить docker-compose, но при выполнении выпадает ошибка связанная с библиотекой mysql. На другой машине все запускается и работает как надо. Очень прошу помочь, может быть кто-то сталкивался с такой проблемой, загугленные способы решения мне не помогли.
Система: macOS Big Sur, Apple m1
Консоль:

docker-compose -f docker-compose-test.yml up -d
[+] Building 2.0s (3/3) FINISHED                                                
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 51B                                        0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => ERROR [internal] load metadata for docker.io/library/mysql:5.7         1.9s
------
 > [internal] load metadata for docker.io/library/mysql:5.7:
------
failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: no match for platform in manifest sha256:a682e3c78fc5bd941e9db080b4796c75f69a28a8cad65677c23f7a9f18ba21fa: not found


  • Вопрос задан

    более года назад

  • 3451 просмотр

Система: macOS Big Sur, Apple m1

docker.io/library/mysql:5.7

Данный образ только под платформу amd64
У вас же arm64

Или используйте эмуляцию amd64:

services:
  db:
    platform: linux/x86_64
    image: mysql:5.7

или используйте mariadb вместо mysql

services:
  db:
    image: mariadb:10.5

Пригласить эксперта

Пришлось сдать свой Macbook с intel x86-64 в ремонт на неделю и поэтому и повозится с М1 Macbook. Из всех контейнеров у меня тоже не стартовал лишь Mysql так как их default images не разработанны для ARM процессоров. Но с —platform linux/amd64 всё заработало:

services:
  db:
    platform: linux/amd64


  • Показать ещё
    Загружается…

09 февр. 2023, в 18:43

10000 руб./за проект

09 февр. 2023, в 18:25

5000 руб./за проект

09 февр. 2023, в 18:23

2500 руб./за проект

Минуточку внимания

Hello all! I am new to docker and web development in all to be honest. I have been running into issues with running docker-compose up. I’m getting issues with my getting the website to run and the db itself. here is some code:

Dockerfile

# ------------------------------------------------------------------------------
# Multi-Stage Node Build.
# This Dockerfile is meant for production builds, but can also be used for dev
# ------------------------------------------------------------------------------

# Final Directory Structure:
# /
#   |_app/
#     |_node_modules/        <-- All node_modules
#     |_src/                 <-- Empty folder to bind the source files into
#     |_package.json
#     |_package-lock.json
#   |_prodapp
#     |_node_modules/        <-- Only the production node_modules
#     |_src/                 <-- Production ready application.
#       |_resources/
#       |_/views
#       |_server.js

# ------------------------------------------------------------------------------
# pin images for reproducability
# ------------------------------------------------------------------------------

FROM node@sha256:0ae1a6a3a8a61e2bcf7f826b2562eb865f9a3095acf41bc6f184773ab66f3007 AS base
WORKDIR /app

# ------------------------------------------------------------------------------
# Setup prod dependencies first.
# ------------------------------------------------------------------------------

FROM base AS prod_dependencies
COPY package*.json ./
RUN npm install --production --silent

# ------------------------------------------------------------------------------
# Install remaining dev dependencies.
# ------------------------------------------------------------------------------

FROM prod_dependencies AS dev_dependencies
RUN npm install
RUN npm install -g nodemon

# ------------------------------------------------------------------------------
# Setup dev target.
# ------------------------------------------------------------------------------

FROM dev_dependencies AS devapp
RUN mkdir /app/src
USER node
WORKDIR /app
EXPOSE 8000
CMD ["npm", "run", "dev"]

# ------------------------------------------------------------------------------
# Setup production target (/prodapp)
# ------------------------------------------------------------------------------

FROM node:14-alpine AS prodapp

# Create prodapp directory
WORKDIR /prodapp
COPY --from=prod_dependencies /app ./
COPY src /prodapp/src

# ------------------------------------------------------------------------------
# Run node as non-root user for production.
# run as non-root user
# ------------------------------------------------------------------------------

USER node
WORKDIR /prodapp
EXPOSE 8000
ENV 
  NODE_ENV='production'

CMD ["npm", "start"]

docker-compose.yml

# ------------------------------------------------------------------------------
# More resources related to this file:
# [1] Overview   | https://docs.docker.com/compose/
# [2] PostgreSQL | https://github.com/docker-library/docs/tree/master/postgres
# [3] Node.js    | https://github.com/nodejs/docker-node/blob/master/README.md#how-to-use-this-image
# -------------
#  More resources for your projects:
# [4] Samples    | https://github.com/docker/awesome-compose
# [5] Env Vars   | https://docs.docker.com/compose/environment-variables/
# [6] Secrets    | https://docs.docker.com/engine/swarm/secrets/#use-secrets-in-compose
# ------------------------------------------------------------------------------

services:
  heroku-cli:
    build: ./heroku
    env_file: ./heroku/.env

  db:
    build: ./db
    env_file: .env
    volumes:
     - ./db/init_data:/docker-entrypoint-initdb.d
      - individualprojects_setg:/var/lib/postgresql/data  

  web:
    build: 
      context: ./
      dockerfile: Dockerfile
      target: devapp
    depends_on:
      - db                                      
    env_file: .env
    ports:
        - "8000:8000" 
    volumes:
      - ./src:/app/src

volumes:
  individualprojects_setg: {}

server.js

// Load the modules
var express = require('express'); //Express - a web application framework that provides useful utility functions like 'http'
var app = express();
var bodyParser = require('body-parser'); // Body-parser -- a library that provides functions for parsing incoming requests
app.use(bodyParser.json());              // Support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // Support encoded bodies
const axios = require('axios');
const qs = require('axios');

//const qs = require('query-string');
//Create Database Connection
var pgp = require('pg-promise')();

const dev_dbConfig = {
	host: 'db',
	port: 5432,
	database: process.env.POSTGRES_DB,
	user:  process.env.POSTGRES_USER,
	password: process.env.POSTGRES_PASSWORD
};
// const dbConfig = {
//   host: '127.0.0.1',
//   port: 5432,
//   database: 'postgres',
//   user: 'postgres',
//   password: 'new_password'
// };
const isProduction = process.env.NODE_ENV === 'production';
const dbConfig = isProduction ? process.env.DATABASE_URL : dev_dbConfig;

// Heroku Postgres patch for v10
// fixes: https://github.com/vitaly-t/pg-promise/issues/711
if (isProduction) {
  pgp.pg.defaults.ssl = {rejectUnauthorized: false};
}

const db = pgp(dbConfig);
//let db = pgp(dbConfig);

// Set the view engine to ejs
app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');
app.use(express.static(__dirname + '/'));


// app.get('/main', function(req, res) {
// 	res.redirect('/main');
// });
app.get('/', (req, res) => {
	res.redirect('/main');
});
// Home page - DON'T CHANGE
app.get('/main', (req, res) => {
  res.render('pages/main', {
    my_title: "main",
    items: '',
    error: false,
    message: ''
    
  });
});


app.get('/reviews' ,  (req, res) => {
	res.render('pages/reviews',{
		my_title: 'Add Review Page'
	});
});

app.post('/main', (req, res) =>
{
    var song = req.body.title;
    console.log(song);
    if(song) {
      console.log("song");
      axios({
        url: 'https://itunes.apple.com/search?song=songs',
        method: 'GET',
        dataType: 'json'
      })
      .then(items =>{
        console.log("test");
        console.log("list", items.data.songs[0]);
        res.render('pages/main',
        {
            my_title: 'main',
        items: items.data.songs[0],
        error: false
        });
      })
      .catch(error => {
        console.log("test");
        if(error.response){
          console.log(error.response.data);
          console.log(error.response.status);
        }
      })
    }
    else {
      console.log("error");
      res.render('pages/main',{
        my_title: "main",
        items: '',
        message: "Enter a name",
        error: true
      })
    }
});



//to request data from API for given search criteria

// app.listen(8000);
const server = app.listen(process.env.PORT || 8000, () => {
	console.log(`Express running → PORT ${server.address().port}`);
});

Errors:

(base) Tawias-MacBook-Pro:iwebsite tawiammorosa$ docker-compose up
Starting iwebsite_heroku-cli_1 ... 
Creating iwebsite_db_1         ... error
Starting iwebsite_heroku-cli_1 ... done
ERROR: for iwebsite_db_1  Cannot create container for service db: invalid mode: /var/lib/postgresql/data

ERROR: for db  Cannot create container for service db: invalid mode: /var/lib/postgresql/data
ERROR: Encountered errors while bringing up the project.

If you guys could help would be very grateful!!

Понравилась статья? Поделить с друзьями:
  • Error while opening the virtual machine vmx file is corrupt перевод
  • Error while opening the virtual machine taking ownership of this virtual machine failed
  • Error when allocating memory or building dag disabling card перевод
  • Error wget spider
  • Error were detected while saving excel