Как переопределить gcc хост-компьютера linux с помощью контейнера gcc docker - PullRequest
0 голосов
/ 06 февраля 2019

Я собираюсь использовать gcc из официальных образов докера по двум причинам:

  • не может ждать годы, пока мой дистрибутив linux доставит их официальные пакеты, чтобы я могиспользовать функции последней версии GCC.Сам компиляция gcc из исходного кода требует слишком больших усилий
  • хочу легко изменить версии gcc, чтобы увидеть различия

Мне удалось временно заменить команду gcc следующим псевдонимом:

alias gcc="docker run --user $(id -u):$(id -g) --rm -t -v "$PWD":/usr/src/myapp -w /usr/src/myapp gcc:8.2 gcc"

Тогда я могу использовать gcc hello.c на консоли хоста, и я получаю hello.c, скомпилированный gcc версии 8.2 из образа докера вместо версии 7.3 хоста.

Это работаеттакже хорошо, если исходный файл находится в подкаталоге.Например, gcc foo/hello.c

Проблема заключается в том, что происходит, если исходный файл находится в более высоком каталоге.Например,

cd foo && gcc ../hello.c

Я получаю сообщение об ошибке:

gcc: ошибка: ../hello.cpp: нет такого файла или каталога

Я думаю, это потому, что текущий каталог хоста сопоставлен с рабочим каталогом = /usr/src/myapp контейнера, а .. выходит за пределы этого рабочего каталога контейнера.См. Выше -v "$PWD":/usr/src/myapp -w /usr/src/myapp часть псевдонима.

Есть ли способ преодолеть эту трудность?

1 Ответ

0 голосов
/ 06 февраля 2019

Я думаю, вам нужно смонтировать root.

alias gcc='docker run --user $(id -u):$(id -g) --rm -t -v /:/mnt -w /mnt/"$PWD" gcc:8.2 gcc'

Обратите внимание, что это не будет работать с абсолютными путями.

...