【问题标题】:How can I add dos2unix to an Alpine based docker container?如何将 dos2unix 添加到基于 Alpine 的 docker 容器中?
【发布时间】:2017-02-23 18:55:09
【问题描述】:

我有以下 dockerfile:

FROM haproxy:alpine

RUN apk --update add bash && apk --no-cache add dos2unix rsyslog supervisor wget curl ruby which py-setuptools py-pip && pip install awscli && chmod +x /*.sh

COPY *haproxy.cfg /etc/
COPY supervisord.ini /etc/
COPY rsyslog.conf /etc/

COPY entrypoint.sh /
RUN dos2unix /entrypoint.sh && apt-get --purge remove -y dos2unix

ENTRYPOINT ["/entrypoint.sh"]

EXPOSE 9999

CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.ini"]

但是,当我构建它时,我得到:

fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
ERROR: unsatisfiable constraints:
  dos2unix (missing):
    required by: world[dos2unix]

我可以在这里看到这个包:https://pkgs.alpinelinux.org/packages?name=dos2unix&branch=&repo=&arch=&maintainer=

我做错了什么?

【问题讨论】:

  • 你会注意到它在testing,而不是maincommunity
  • 有没有办法强制它接受测试?还是手动添加的方法?
  • 出于好奇,您为什么需要它?在许多情况下,tr -d '\r' <in >out && mv out in 就足够了。
  • 我的行尾显示为^M - 我应该同时考虑\r^M 以及可能的其他人吗?
  • 完全清楚:dos2unix 修复的 DOS 和 UNIX 文本文件之间的唯一区别在于前者中的 CRLF 行结尾与 LF 之间的区别行结尾在后者。 \r^M 是表示 CR 字符的两种不同方式;有些软件使用前者,有些则使用后者(有些则完全不同,例如%0D\x0d)。

标签: docker dockerfile alpine


【解决方案1】:

在您自己的链接中,dos2unix(此时,2017 年 2 月)仅在 testing 中,而不在 maincommunity 中。来自the relevant documentation--

如果您只在配置中启用了主存储库,apk 将不会包含来自其他存储库的包。要在不更改存储库配置文件的情况下从 edge/testing 存储库安装包,请使用以下命令。这将告诉 apk 使用该特定存储库。

apk add cherokee --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted

在这种情况下,您需要用dos2unix 替换cherokee

【讨论】:

  • 软件包已在存储库之间移动,因此您将需要此命令:apk add dos2unix --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/community/ --allow-untrusted
猜你喜欢
  • 1970-01-01
  • 2020-07-29
  • 2021-12-11
  • 2020-11-14
  • 2017-07-11
  • 2019-09-19
  • 2021-02-19
  • 2021-07-17
  • 1970-01-01
相关资源
最近更新 更多