标签: docker-entrypoint

如何在一个 Github Actions Docker 中运行多个命令

在一个中运行多个命令的正确方法是什么action

例如:

我想将 python 脚本作为action. 在运行此脚本之前,我需要安装requirements.txt.

我可以想到几个选项:

  • 使用Dockerfile其中的命令创建一个RUN pip install -r requirements.txt
  • 使用python:3图像,并在运行pip install -r requirements.txtin 中entrypoint.sh的参数之前运行文件args中的main.workflow
  • 同时使用pip installpython myscript.py作为args

另一个例子:

我想运行一个存在于我的存储库中的脚本,然后比较 2 个文件(它的输出和一个已经存在的文件)。

这是一个包含两个命令的过程,而在第一个示例中,该pip install命令可以被视为构建命令而不是测试命令。

问题:

我可以为另一个命令创建另一个 Docker,其中将包含前一个 Docker 的输出吗?

我正在寻找有关命令 in Dockerfile、inentrypoint或 in位置的指南args

docker dockerfile docker-entrypoint github-actions

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

docker-compose,如何在容器启动后运行 bash 命令,而不覆盖 docker 拉入的映像中的 CMD 或 ENTRYPOINT?

我只是想重命名一些文件,而不覆盖 docker 拉入的 wordpress 图像中的命令。在 docker-compose.yml 中,我尝试使用“command”和“entrypoint”来运行 bash 命令,两者基本上都会中断正在执行的操作发生在图像内部,但一切都失败了。

docker-compose docker-entrypoint

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

在 docker-compose 中使用入口点运行自定义脚本

我修改了https://hub.docker.com/_/solr/ 上docker-compose.yml给出的文件,添加了一个volumes结构和的改变entrypoint。修改后的文件如下:

version: '3'
services:
  solr:
    image: solr
    ports:
     - "8983:8983"
    volumes:
      - ./solr/init.sh:/init.sh
      - ./solr/data:/opt/solr/server/solr/mycores
    entrypoint:
      - init.sh
      - docker-entrypoint.sh
      - solr-precreate
      - mycore
Run Code Online (Sandbox Code Playgroud)

我需要在入口点开始之前运行这个“init.sh”,以准备我在容器内的文件。

但我收到以下错误:

错误:对于solr_solr_1无法启动服务solr:oci运行时错误:container_linux.go:247:启动容器进程导致“exec:\”init.sh\“:在$PATH中找不到可执行文件”

早些时候我从这里找到了关于 Neo4j 中的官方图像钩子。我也可以在这里使用类似的东西吗?

更新 1:从下面的评论中,我意识到 dockerfile 设置是WORKDIR /opt/solr由于 which executable file not found in $PATH. 所以我通过使用提供入口点的绝对路径来测试/init.sh. 但这也会产生错误,但有一个不同的错误:

standard_init_linux.go:178: exec 用户进程导致“exec 格式错误”

docker docker-compose docker-entrypoint

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

Docker:入口点的覆盖涉及CMD规范?

这是我纯粹好奇的问题:

我必须个性化 Docker 映像,特别是这是我的 dockerfile 的摘录:

ARG DEFAULT_PHP_VERSION
FROM php:${DEFAULT_PHP_VERSION:+${DEFAULT_PHP_VERSION}-}fpm-alpine
# RUN some personal stuff
RUN rm -rf /var/www/html

# Set proper Entrypoint
COPY build/fs/usr/local/bin/my-entrypoint.sh /usr/local/bin/my-entrypoint.sh
RUN chmod +x /usr/local/bin/my-entrypoint.sh
ENTRYPOINT [ "my-entrypoint.sh" ]

WORKDIR /var/www
Run Code Online (Sandbox Code Playgroud)

并且my-entrypoint.sh是:

#!/bin/sh

set -e

echo "Trying my-entrypoint with args: $@"

if [ ! -z "$XDEBUG_ENABLED" ] ; then
    echo "Enabling XDEBUG"
    docker-php-ext-enable xdebug
fi

# execute default entrypoint
echo "Execute Main:"
docker-php-entrypoint $@
echo "Main Done"
Run Code Online (Sandbox Code Playgroud)

原始图像PHP-FPM-ALPINE具有命令

CMD [ "php-fpm" …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile docker-entrypoint

10
推荐指数
1
解决办法
8291
查看次数

Docker 入口点权限被拒绝

我目前正在尝试处理对 kubernetes 集群的部署。部署不断失败并响应

 Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/entrypoint.sh\": permission denied"
Run Code Online (Sandbox Code Playgroud)

我试图更改文件的权限,这似乎成功了,就像我 ls -l 我得到 -rwxr-xr-x 作为文件的权限一样。

我曾尝试将 chmod 命令放在 dockerfile 本身以及构建和上传图像之前,但似乎都没有任何区别。任何想法为什么我仍然收到错误?

下面的 dockerfile

FROM node:10.15.0
CMD []
ENV NODE_PATH /opt/node_modules

# Add kraken files
RUN mkdir -p /opt/kraken
ADD .  /opt/kraken/
# RUN chown -R node /opt/
WORKDIR /opt/kraken

RUN npm install && \
    npm run build && \
    npm prune --production

# Add the entrypoint
COPY ./entrypoint.sh /entrypoint.sh
RUN chmod …
Run Code Online (Sandbox Code Playgroud)

docker kubernetes docker-entrypoint

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

查看 docker 入口点输出

我正在配置一个在容器启动后执行的入口点:

COPY entrypoint.sh /entrypoint.sh
RUN ["chmod", "+x", "/entrypoint.sh"]

ENTRYPOINT exec /entrypoint.sh
Run Code Online (Sandbox Code Playgroud)

但是,我无法看到entrypoint.sh执行时的输出docker-compose up

唯一的输出是:

服务退出,代码为 2

容器被杀死所以我不能做docker logs <container_id>

我尝试过使用docker events命令,但没有看到任何与entrypoint.sh.

我知道入口点文件有错误,但我想查看执行的输出。

有任何想法吗?

docker docker-compose docker-entrypoint

9
推荐指数
0
解决办法
9954
查看次数

docker run 没有入口点

我们可以有一个没有入口点的 {docker run} 命令吗?据我所知,必须有一个入口点(如果未指定,则在大多数情况下应默认为“bash”)。否则,我无法将图像作为容器运行。

假设我在物理机上安装 Linux。
有一个后台服务在后台运行,监听端口然后做一些事情。
在我登录之前,没有运行 bash shell,我仍然可以通过名称和端口从另一台计算机调用后台服务。

我可以通过 {docker run} 做类似的事情吗?这意味着,我不需要入口点(或者入口点是系统进程而不是 bash?),只需让容器系统及其后台服务启动并运行即可。

docker docker-entrypoint

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

将 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万
查看次数

Dockerfile 入口点无法切换用户

我无法从入口点脚本将用户切换到非 root 用户。在 Dockerfile 中更改用户的 User 指令有效,但我无法使用 chmod 更改权限。为了解决这个问题,我创建了entrypoint.sh脚本来更改文件夹权限,但是当我尝试使用su命令切换用户时,它显然不起作用,容器仍然以 root 身份运行。

Dockerfile

FROM php:7.2-fpm

# Installing dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    mysql-client \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    zip \
    jpegoptim optipng pngquant gifsicle \
    vim \
    unzip \
    git \
    curl

# Installing composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

ENV USER_ID=1000
ENV GROUP_ID=1000
ENV USER_NAME=www
ENV GROUP_NAME=www

RUN groupadd -g $GROUP_ID $GROUP_NAME …
Run Code Online (Sandbox Code Playgroud)

switch-user docker dockerfile docker-compose docker-entrypoint

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

找不到 Docker Debian nc 命令

当我Debian从 docker-compose构建我的图像时,使用命令$ docker-compose -f docker-compose-dev.yml build web,如下所示:

docker-compose-fev.yml

services:

  web:
    build:
      context: ./services/web
      dockerfile: Dockerfile-dev
    volumes:
      - './services/web:/usr/src/app'  
    ports:
      - 5001:5000
    environment:
      - FLASK_ENV=development
      - APP_SETTINGS=project.config.DevelopmentConfig
      - DATABASE_URL=postgres://postgres:postgres@web-db:5432/web_dev 
      - DATABASE_TEST_URL=postgres://postgres:postgres@web-db:5432/web_test
      - SECRET_KEY=my_precious
    depends_on:  
      - web-db
      - redis
Run Code Online (Sandbox Code Playgroud)

好像它似乎成功构建了所有包,我得到:

web_1| /usr/src/app/entrypoint.sh: 5: /usr/src/app/entrypoint.sh: nc: not found
Run Code Online (Sandbox Code Playgroud)

如果我更改#!/bin/sh#!/bin/bash,则错误日志更改:

web_1| /usr/src/app/entrypoint.sh: line 5: nc: command not found
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM python:3.7-slim-buster

RUN apt-get update && apt-get -y dist-upgrade
RUN apt-get -y install build-essential libssl-dev libffi-dev libblas3 …
Run Code Online (Sandbox Code Playgroud)

docker docker-entrypoint

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