当前位置: 首页 > 知识库问答 >
问题:

为什么以root用户身份启动时,我的容器看起来是空的?

万俟穆冉
2023-03-14

当我进入我的容器时,似乎没有安装任何ebeen?Docker pull brandojazz/iit-term-synthesis:test then

docker run -u root -ti brandojazz/iit-term-synthesis:test_arm bash

请参阅:

(base) root@897a4007076f:/home/bot# opam switch
[WARNING] Running as root is not recommended
[ERROR] Opam has not been initialised, please run `opam init'

它应该已经初始化了。

FROM continuumio/miniconda3
# FROM --platform=linux/amd64 continuumio/miniconda3

MAINTAINER Brando Miranda "me@gmail.com"

RUN apt-get update \
  && apt-get install -y --no-install-recommends \
    ssh \
    git \
    m4 \
    libgmp-dev \
    opam \
    wget \
    ca-certificates \
    rsync \
    strace \
    gcc
#    rlwrap \
#    sudo

# https://github.com/giampaolo/psutil/pull/2103

RUN useradd -m bot
# format for chpasswd user_name:password
# RUN echo "bot:bot" | chpasswd
# RUN && adduser docker sudo

WORKDIR /home/bot
USER bot

ADD https://api.github.com/repos/IBM/pycoq/git/refs/heads/main version.json

# -- setup opam like VP's PyCoq
RUN opam init --disable-sandboxing
# compiler + '_' + coq_serapi + '.' + coq_serapi_pin
RUN opam switch create ocaml-variants.4.07.1+flambda_coq-serapi.8.11.0+0.11.1 ocaml-variants.4.07.1+flambda
RUN opam switch ocaml-variants.4.07.1+flambda_coq-serapi.8.11.0+0.11.1
RUN eval $(opam env)

RUN opam repo add coq-released https://coq.inria.fr/opam/released
# RUN opam pin add -y coq 8.11.0
# ['opam', 'repo', '--all-switches', 'add', '--set-default', 'coq-released', 'https://coq.inria.fr/opam/released']
RUN opam repo --all-switches add --set-default coq-released https://coq.inria.fr/opam/released
RUN opam update --all
RUN opam pin add -y coq 8.11.0

#RUN opam install -y --switch ocaml-variants.4.07.1+flambda_coq-serapi_coq-serapi_8.11.0+0.11.1 coq-serapi 8.11.0+0.11.1
RUN opam install -y coq-serapi

#RUN eval $(opam env)
#
## makes sure depedencies for pycoq are installed once already in the docker image
#RUN pip install https://github.com/ddelange/psutil/releases/download/release-5.9.1/psutil-5.9.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
#ENV WANDB_API_KEY="SECRET"
#RUN pip install wandb --upgrade
#
#RUN pip install ultimate-utils
## RUN pip install pycoq  # do not uncomment on arm, unless serlib is removed from setup.py in the pypi pycoq version.
## RUN pip install ~/iit-term-synthesis  # likely won't work cuz we don't have iit or have pused it to pypi
#
## then make sure editable mode is done to be able to use changing pycoq from system
#RUN echo "pip install -e /home/bot/ultimate-utils" >> ~/.bashrc
#RUN echo "pip install -e /home/bot/pycoq" >> ~/.bashrc
#RUN echo "pip install -e /home/bot/iit-term-synthesis" >> ~/.bashrc
#RUN echo "pip install wandb --upgrade" >> ~/.bashrc
#
#RUN echo "eval $(opam env)" >> ~/.bashrc
## - set env variable for bash terminal prompt p1 to be nicely colored
#ENV force_color_prompt=yes
#
#RUN mkdir -p /home/bot/data/

# RUN pytest --pyargs pycoq
#CMD /bin/bash

共有1个答案

邹海超
2023-03-14

注:这可能不是你唯一的问题(我不知道<code>opam</code>是什么,也不知道它是如何工作的),但有一件事很明显:

这。。。

RUN eval $(opam env)

...什么都不做。每个< code>RUN调用都发生在一个新的子shell中;在一个< code>RUN命令中设置的环境变量在后续的< code>RUN命令中不可见。

不是单个命令RUN命令的列表,而是将所有内容链接在一个命令中:

RUN eval $(opam env) && \
  opam repo add coq-released https://coq.inria.fr/opam/released && \
  opam repo --all-switches add --set-default coq-released https://coq.inria.fr/opam/released && \
  opam update --all && \
  opam pin add -y coq 8.11.0 && \
  opam install -y coq-serapi

因为上面的命令在单个shell中运行,所以eval$(opam-env)设置的环境将可用于以下所有命令。

 类似资料:
  • 我基本上是试图以root用户身份运行,而默认用户则有所不同。 由于它运行的crontabs使用图像上其他文件的敏感信息,我想让root访问这些文件,启动crond进程,然后将用户切换到新创建的文件。通过这种方式,cronJobs将能够获得他们需要的信息,同时保护容器中的敏感文件免受任何可能获得exec访问权限的人的攻击。 尝试过这样的几件事: 但这并不是以root身份运行crond进程,而是以ne

  • 本文向大家介绍以非root用户身份运行Docker容器,包括了以非root用户身份运行Docker容器的使用技巧和注意事项,需要的朋友参考一下 当您在Docker容器中运行应用程序时,默认情况下,它有权访问所有root特权。您可能已经注意到,当打开Ubuntu Docker Container Bash时,默认情况下您以root用户身份登录。在应用程序的安全性方面,这可能是一个主要问题。任何局外人

  • 我正在编写一个将在Linux服务器上运行的Java程序。程序需要以“root”的身份开始,做某种操作(读取文件),然后将自己降级为非root用户,在文件已经读取并关闭之后。 我通读了下面的问题,但还没有找到可行的解决方案--尤其是因为我处理的不是http端口。

  • 问题内容: 运行时默认 要么 您以root用户身份连接到终端,但是我想以其他用户身份连接。这可能吗? 问题答案: 对于: 在启动Docker容器时,只需添加选项即可更改为其他用户。 对于或: 由于该命令用于附加/执行到现有进程中,因此它直接在此使用当前用户。 如果您确实想附加到想要拥有的用户,那么 从该用户开始或在您的使用中提及它 使用`su更改用户

  • 救命啊! 我正在使用SpringBoot1.3.6和Gradle的内置启动脚本。哦,还有distZip任务来拉链。 在不久之前,这一切都运作得很好...然后我--我不知道是什么--把事情搞砸了。 我已经在我的raspberry Pi上安装了这个包(基本上是解压缩的),并检查了所有权和权限。所有的东西都归我想要运行应用程序的用户所有(用户“AppService”组“Pi”),并确认文件的权限--如果

  • 我使用Ansible安装了Nginx。要在Centos7上安装,我使用了yum软件包,因此默认情况下它是以root用户身份运行的。我希望它在Centos中以不同的用户(前nginx用户)身份启动和运行。当我尝试与其他用户一起运行时,会出现以下错误: nginx的工作。服务失败,因为控制进程已退出,错误代码为。有关详细信息,请参阅“systemctl status nginx.service”和“j