Как включить Webots в сборку контейнера Docker?

Я хочу добавить Webots в свой Dockerfile, но столкнулся с проблемой. Мои текущие шаги по установке вручную (из здесь):

$ # launch my Docker container without Webots
$ wget -qO- https://cyberbotics.com/Cyberbotics.asc | sudo apt-key add -
$ sudo apt update
$ sudo apt install -y software-properties-common
$ sudo apt-add-repository 'deb https://cyberbotics.com/debian/ binary-amd64/'
$ sudo apt update
$ sudo apt-get install webots
$ # now I have a Docker container with Webots

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

# Install Webots (a robot simulator)
RUN wget -qO- https://cyberbotics.com/Cyberbotics.asc | sudo apt-key add -
RUN apt-get update && sudo apt-get install -y \
               software-properties-common \
               libxtst6
RUN sudo apt-add-repository 'deb https://cyberbotics.com/debian/ binary-amd64/'
RUN apt-get update && echo 31 1 | sudo apt-get install -y \
               webots  # the echo fills the "keyboard country of origin" prompts

Как я могу включить Webots в контейнер Docker? Я не хочу просто использовать чужой контейнер (например, cyberbotics/webots-docker), так как мне нужно добавить в контейнер другие вещи, например ROS2.


person Drake P    schedule 14.02.2021    source источник
comment
почему бы вам просто не скопировать и не отредактировать github.com/cyberbotics/webots-docker /blob/master/Dockerfile?   -  person Yohanes Gultom    schedule 14.02.2021
comment
Настраивает ли DEBIAN_FRONTEND=noninteractive, как описано в Возможно ли отвечать на вопросы диалога при установке под докером? help? (Здесь вам вообще не нужен sudo; Dockerfile по умолчанию должен запускаться от имени пользователя root.)   -  person David Maze    schedule 14.02.2021


Ответы (1)


Изменить: этот ответ неверен. FROM так не работает, и будет использован только последний оператор FROM.

Оригинальный ответ:

Это оказывается проще, чем я ожидал. Вы можете включить более одного оператора FROM $IMAGE в Dockerfile, чтобы объединить базовые образы. Вот пример, объясняющий, что я сделал (обратите внимание, что все операторы ARG должны стоять перед первым оператором FROM):

ARG BASE_IMAGE_WEBOTS=cyberbotics/webots:R2021a-ubuntu20.04
ARG IMAGE2=other/image:latest

FROM $BASE_IMAGE_WEBOTS AS base
FROM $IMAGE2 AS image2

# other things needed
person Drake P    schedule 27.02.2021