在一个中运行多个命令的正确方法是什么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 install和python myscript.py作为args我想运行一个存在于我的存储库中的脚本,然后比较 2 个文件(它的输出和一个已经存在的文件)。
这是一个包含两个命令的过程,而在第一个示例中,该pip install命令可以被视为构建命令而不是测试命令。
我可以为另一个命令创建另一个 Docker,其中将包含前一个 Docker 的输出吗?
我正在寻找有关命令 in Dockerfile、inentrypoint或 in位置的指南args。
我只是想重命名一些文件,而不覆盖 docker 拉入的 wordpress 图像中的命令。在 docker-compose.yml 中,我尝试使用“command”和“entrypoint”来运行 bash 命令,两者基本上都会中断正在执行的操作发生在图像内部,但一切都失败了。
我修改了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 映像,特别是这是我的 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) 我目前正在尝试处理对 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) 我正在配置一个在容器启动后执行的入口点:
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 run} 命令吗?据我所知,必须有一个入口点(如果未指定,则在大多数情况下应默认为“bash”)。否则,我无法将图像作为容器运行。
假设我在物理机上安装 Linux。
有一个后台服务在后台运行,监听端口然后做一些事情。
在我登录之前,没有运行 bash shell,我仍然可以通过名称和端口从另一台计算机调用后台服务。
我可以通过 {docker run} 做类似的事情吗?这意味着,我不需要入口点(或者入口点是系统进程而不是 bash?),只需让容器系统及其后台服务启动并运行即可。
假设我在 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阶段期间传递?
我无法从入口点脚本将用户切换到非 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
当我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)