标签: docker-entrypoint

将 ARG 传递给 ENTRYPOINT

假设我在 Dockerfile 中有这个:

ARG FOO=1
ENTRYPOINT ["docker.r2g", "run"]
Run Code Online (Sandbox Code Playgroud)

我用以下方法构建上述内容:

docker build -t "$tag" --build-arg FOO="$(date +%s)" .
Run Code Online (Sandbox Code Playgroud)

有没有办法做这样的事情:

ENTRYPOINT ["docker.r2g", "run", ARG FOO]  // something like this
Run Code Online (Sandbox Code Playgroud)

我想这个论点也可以通过 withdocker run而不是在docker build阶段期间传递?

docker dockerfile docker-build docker-entrypoint docker-run

8
推荐指数
2
解决办法
1万
查看次数

Docker入口点和cmd在一起

我尝试使用入口点和cmd设置Docker.

FROM debian:stretch
RUN apt-get update && \
apt install gnupg ca-certificates -y 
RUN echo "deb http://repo.aptly.info/ squeeze main" > /etc/apt/sources.list.d/aptly.list
RUN apt-key adv --keyserver keys.gnupg.net --recv-keys 9E3E53F19C7DE460
RUN apt update && apt install aptly -y
ADD aptly.conf /etc/aptly.conf
ADD start.sh .
VOLUME ["/aptly"]
ENTRYPOINT ["/start.sh"]
CMD ["aptly", "api", "serve"]
Run Code Online (Sandbox Code Playgroud)

但是入口点脚本没有停止...... cmd命令没有启动

我的脚本在这里:

#!/bin/bash
 set -e 
 init_aptly() { 
 #import pgp key
#create nginx root folder in /aptly
su -c "mkdir -p /aptly/.aptly/public"
echo "12"
 #initialize repository
 #aptly create repo doze-server …
Run Code Online (Sandbox Code Playgroud)

cmd docker docker-entrypoint

6
推荐指数
3
解决办法
6215
查看次数

如何在 docker run 命令中将 Java 选项/变量传递给 Springboot 应用程序

我有一个 Spring Boot 应用程序,它使用配置文件在不同的环境中进行配置。我想将此配置文件信息作为参数传递给我的docker run命令。我该怎么做?

这是我的 dockerfile

FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/demo-app-1.0-SNAPSHOT.jar

COPY ${JAR_FILE} /opt/lib/demo-app.jar

EXPOSE 80

# ENTRYPOINT ["java","-Dspring.profiles.active=dockerdev","-jar","/opt/lib/demo-app.jar"]
# Above line works, but not desired as profile will change in diff envs
ENTRYPOINT ["java","-jar","/opt/lib/demo-app.jar"]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法,但是都没有效果

docker run -p 8000:80 demo-app -Dspring.profiles.active=dockerdev

docker run -p 8000:80 demo-app --rm -e JAVA_OPTS='-Dspring.profiles.active=dockerdev'

请帮忙。

说明:我正在使用多个配置文件。因此,我不希望在应用程序或 docker 文件中提及活动配置文件。相反,我想使用相同的应用程序和 docker 文件并在不同的环境中运行它,并传递要在 docker run 命令中使用的活动配置文件。如果上述任何内容没有澄清这一点,我们深表歉意。

java docker spring-boot dockerfile docker-entrypoint

6
推荐指数
4
解决办法
2万
查看次数

docker 容器在入口点退出

我正在尝试使用 docker run 命令通过 Dockerfile 运行 docker 容器。以下是我的 Dockerfile。

FROM python:3.6
# for imaging stuff
RUN apt-get update
RUN apt install libmagickwand-dev
# Create  app directory
RUN mkdir -p /home/test/app
# Install Libre Office and ghostscript for pdf conversion and repairing
RUN apt-get update -qq \
    && apt-get install -y -q libreoffice \
    && apt-get remove -q -y libreoffice-gnome \
    && apt-get update \
    && apt-get -y install ghostscript \
    && apt-get -y install nano \
    && apt-get -y install …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile docker-build docker-entrypoint docker-run

5
推荐指数
1
解决办法
2235
查看次数

Exec 未替换 Docker 入口点脚本中的 bash shell

我正在尝试从 Docker 容器运行 UWSGI 服务器。我已经取得了成功,但我遇到了一个问题,因为我的入口点脚本在容器启动后仍将以 PID 1 的 root 身份运行,而我宁愿将初始进程/bin/bash替换为 UWSGI 进程:

bash-4.4# ps aux
PID   USER     TIME  COMMAND
    1 root      0:00 {docker-entrypoi} /bin/bash /usr/local/bin/docker-entrypoint.sh
   19 myuser    0:00 uwsgi --ini /opt/mysite/uwsgi.ini
   21 myuser    0:00 uwsgi --ini /opt/mysite/uwsgi.ini
   22 myuser    0:00 uwsgi --ini /opt/mysite/uwsgi.ini
   24 myuser    0:02 python3 ./manage.py qcluster
   28 myuser    0:00 python3 ./manage.py qcluster
   29 myuser    0:00 python3 ./manage.py qcluster
   30 myuser    0:00 python3 ./manage.py qcluster
   31 myuser    0:00 python3 ./manage.py qcluster
   32 myuser    0:00 python3 ./manage.py …
Run Code Online (Sandbox Code Playgroud)

bash uwsgi docker docker-entrypoint

5
推荐指数
1
解决办法
1806
查看次数

将 shell 或 bash 添加到 docker 镜像(基于 Debian GNU/Linux 的 Distroless)

我想添加shellbash到我的图像以执行安装命令。

我已将/bin/bashVM 上的复制到我的映像上Dockerfile

COPY /bin/bash /bin/
Run Code Online (Sandbox Code Playgroud)

但是当我执行 docker 命令时:

 docker run -it --entrypoint "/bin/bash" <my_image>
Run Code Online (Sandbox Code Playgroud)

然后我收到以下错误:

/bin/bash: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

谢谢你的帮助

bash glibc docker dockerfile docker-entrypoint

5
推荐指数
3
解决办法
5825
查看次数

如何通过 docker run 将本地文件作为参数传递?

我有一个像这样的 Dockerfile:

FROM python:3.6
RUN mkdir /code
COPY dist/python-0.1.0.tar.gz /code
WORKDIR /code
RUN pip install python-0.1.0.tar.gz
ENTRYPOINT ["post"]
Run Code Online (Sandbox Code Playgroud)

“post”命令可以正常运行我的代码,无需任何参数。我的问题是如何让 docker 容器在运行时排除本地文件,因为它可能会发生变化。

这是我运行脚本的命令,但说没有这样的文件或目录 data/output.xml

docker run container data/output.xml
Run Code Online (Sandbox Code Playgroud)

我也尝试过这个但没有运气

docker run -v data:/data containter /data/output.xml
Run Code Online (Sandbox Code Playgroud)

感谢您的任何帮助!

python docker dockerfile docker-entrypoint

4
推荐指数
1
解决办法
8314
查看次数

如何将PowerShell脚本指定为Docker容器入口点?

我需要将[Windows] Docker容器作为可执行文件运行,运行相当复杂的PowerShell脚本(调用Java和.NET应用程序)并退出。Docker文档建议ENTRYPOINT用于此目的。因此,我继续创建了一个包含以下内容的Dockerfile:

FROM microsoft/dotnet-framework
COPY run.ps1 /
ENTRYPOINT [ "powershell.exe", "C:\\run.ps1" ]
Run Code Online (Sandbox Code Playgroud)

的内容run.ps1(此问题的超级简化):

gci
write-host "looks like everything is good!"
Run Code Online (Sandbox Code Playgroud)

然后,我运行了以下命令:

# Build the Docker image
docker build --rm -t testdockerps .

# Create/run container using above image
docker run -it testdockerps
Run Code Online (Sandbox Code Playgroud)

容器成功运行,显示的内容,C:\后跟消息- looks like everything is good!

根据我的观察,我有几个问题:

  1. 基于Windows的Docker容器的默认外壳是什么?有什么方法可以将其设置为PowerShell,因此我不必将“ powershell”指定为ENTRYPOINTJSON数组的第一个元素?我应该SHELL在Dockerfile中使用命令吗?
  2. 创建和运行容器大约需要3-4秒,这在一定程度上是可以理解的,但是在PS1脚本完成后,容器退出并返回命令提示符大约需要花费10秒的时间。延迟的原因可能是什么?

powershell docker docker-for-windows docker-entrypoint

4
推荐指数
1
解决办法
6138
查看次数

Docker Standard_init_linux.go:207:exec用户进程导致“没有这样的文件或目录”

我的Dockerfile看起来像:

FROM ubuntu:18.04

RUN apt-get ...
...
COPY app /bin
Run Code Online (Sandbox Code Playgroud)

我的可执行文件app只是bash脚本:

make -f /app/makefile $@
Run Code Online (Sandbox Code Playgroud)

当我尝试跑步

docker run -v "`pwd`:/project" -it --rm my_image app
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

standard_init_linux.go:207: exec user process caused "exec format error"
make: *** [run] Error 1
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

entry-point docker dockerfile docker-entrypoint

4
推荐指数
1
解决办法
2993
查看次数

postgresql:dockerfile 从入口点脚本创建用户和数据库

我有一个 Dockerfile

COPY ./docker-entrypoint.sh /

RUN chmod +x /docker-entrypoint.sh

USER postgres

ENTRYPOINT ["/docker-entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)

其中 docker-entrypoint.sh 是:

#!/bin/sh

# Before PostgreSQL can function correctly, the database cluster must be initialized:
initdb -D /var/lib/postgres/data


#start postgres server
/usr/bin/postgres -D /var/lib/postgres/data &


# create a user or role
psql -d postgres -c "CREATE USER someuser WITH PASSWORD 'jkhkjah';" 

# create database 

psql -d postgres -c "CREATE DATABASE dockertest OWNER 'someuser';"
Run Code Online (Sandbox Code Playgroud)

它不会创建 someuser 和 dockertest 数据库。这个怎么做

postgresql docker docker-entrypoint

3
推荐指数
1
解决办法
2万
查看次数