AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 679283
Accepted
dlyk1988
dlyk1988
Asked: 2015-03-31 04:46:50 +0800 CST2015-03-31 04:46:50 +0800 CST 2015-03-31 04:46:50 +0800 CST

Arch linux Docker 映像的构建挂起 - RUN pacman -Syyu --needed --noconfirm

  • 772

我正在尝试使用 Dockerfile 构建自定义 Docker 映像。我使用的基本图像是这个:

l3igggs/archlinux

我的 Dockerfile 是这样的:

FROM l3iggs/archlinux:latest

COPY source /srv/visitor

WORKDIR /srv/visitor

RUN pacman -Syyu --needed --noconfirm &&
        pacman -S --needed --noconfirm cronie nodejs phantomjs &&
        printf "1.2.3.4 www.hahaha.org \n" >> /etc/hosts &&
        printf "*/2 * * * *       node /srv/visitor/visitor.js \n" >> cronJobs &&
        printf "*/5 * * * *       killall -older-than 5m phantomjs \n" >> cronJobs &&
        printf "0 0 * * * rm /srv/visitor/visitor-info.log \n" >> cronJobs &&
        crontab cronJobs &&
        rm cronJobs &&
        npm install

EXPOSE 80

CMD ["/bin/sh", "-c"]

现在,当它到达应该更新的“RUN”部分时,它会挂起并输出以下错误消息:

Step 3 : RUN pacman -Syyu --needed --noconfirm &&
 ---> Running in ae19ff7ca233
/bin/sh: -c: line 1: syntax error: unexpected end of file
INFO[0013] The command [/bin/sh -c pacman -Syyu --needed --noconfirm &&] returned a non-zero code: 1

有任何想法吗?

更新 1:

现在,我怀疑我的问题与“RUN”命令有关,而不是与容器内执行的“pacman -Syyu”有关。这真的不应该是刹车,但它显然是。

docker
  • 1 1 个回答
  • 819 Views

1 个回答

  • Voted
  1. Best Answer
    Andy Shinn
    2015-04-01T14:40:21+08:002015-04-01T14:40:21+08:00

    您缺少\跨多行构建命令。运行命令应该更像:

    RUN pacman -Syyu --needed --noconfirm && \
            pacman -S --needed --noconfirm cronie nodejs phantomjs && \
            printf "1.2.3.4 www.hahaha.org \n" >> /etc/hosts && \
            printf "*/2 * * * *       node /srv/visitor/visitor.js \n" >> cronJobs && \
            printf "*/5 * * * *       killall -older-than 5m phantomjs \n" >> cronJobs && \
            printf "0 0 * * * rm /srv/visitor/visitor-info.log \n" >> cronJobs && \
            crontab cronJobs && \
            rm cronJobs && \
            npm install
    

    不过,有几点需要注意:

    • 您在构建过程中将 crontab 作为命令运行。当您运行实际图像时,这不会运行。
    • 您正在构建期间添加主机条目。这可能会在运行时被覆盖。有一个--add-host运行时选项:https ://docs.docker.com/reference/commandline/cli/#adding-entries-to-a-container-hosts-file 。
    • 您无需将命令设置为/bin/sh -c. 如果您只是在数组之外传递一个裸命令,Docker 实际上会为您执行此操作。请参阅https://docs.docker.com/reference/builder/#cmd上三种CMD形式中的最后一种。
    • 1

相关问题

  • 如何调试 docker 容器初始化?

  • 创建后立即启动 Docker 容器?

  • 如何在不指定命令的情况下在 Docker 容器中运行完整的操作系统?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve