在无人机上运行Docker时,无法findhex的Phoenix应用程序

所以我现在有一个设置,我部署我的dockerized的凤凰应用程序来运行自我托pipeDrone服务器上的testing。 目前问题出现了,无论我使用的是什么Dockerfile(目前是alpine-elixir-phoenix或者下面的base elixir图片),安装如下所示的hex / rebar:

# Install Hex+Rebar RUN mix local.hex --force && \ mix local.rebar --force 

我在无人机启动时收到错误,

Could not find Hex, which is needed to build dependency :phoenix

我已经发现,通过使用一个老版本的阿尔卑斯 – 仙丹凤:2.0这个问题没有出现,这导致我相信这可能是与hex/仙丹自那时以来更新? 另外,如果我运行这个命令来安装Drone的容器中的hex和螺纹,一旦它被实例化,就没有问题了。 我在实例化的Drone容器上运行了一个whoami ,如果这有所作为,用户就是root。 此外,如果我在本地运行容器并运行mix hex.info ,它正确地指出已安装hex,但问题是在Drone实例化的容器上失败。

例如.drone.yml:

 pipeline: backend_test: image: bitwalker/alpine-elixir-phoenix commands: - cd api - apk update - apk add postgresql-client - MIX_ENV=test mix local.hex --force - MIX_ENV=test mix local.rebar --force - MIX_ENV=test mix deps.get - MIX_ENV=test mix ecto.create - MIX_ENV=test mix ecto.migrate - mix test 

示例Docker使用的文件(bitwalker / alpine-elixir-phoenix) – https://github.com/bitwalker/alpine-elixir-phoenix/blob/master/Dockerfile

在第29&&30行的Dockerfile中发生了同样的local.hex和local.rebar安装。然而,在实例化容器时,找不到它,因此必须在CMD中再次运行。

此外,我再次遇到这个问题,但使用makeg++不安装在高山上。 我可能做了一些不正确的事情,但是我看不到在哪里。

testbuild_env Dockerfile

 FROM bitwalker/alpine-erlang:19.2.1b ENV HOME=/opt/app/ TERM=xterm # Install Elixir and basic build dependencies RUN \ echo "@edge http://nl.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories && \ apk update && \ apk --no-cache --update add \ git make g++ curl \ elixir@edge=1.4.2-r0 && \ rm -rf /var/cache/apk/* # Install Hex+Rebar RUN mix local.hex --force && \ mix local.rebar --force ENV DOCKER_BUCKET test.docker.com ENV DOCKER_VERSION 17.05.0-ce-rc1 ENV DOCKER_SHA256 4561742c2174c01ffd0679621b66d29f8a504240d79aa714f6c58348979d02c6 RUN set -x \ && curl -fSL "https://${DOCKER_BUCKET}/builds/Linux/x86_64/docker-${DOCKER_VERSION}.tgz" -o docker.tgz \ && echo "${DOCKER_SHA256} *docker.tgz" | sha256sum -c - \ && tar -xzvf docker.tgz \ && mv docker/* /usr/local/bin/ \ && rmdir docker \ && rm docker.tgz \ && docker -v COPY docker-entrypoint.sh /usr/local/bin/ ENTRYPOINT ["docker-entrypoint.sh"] CMD ["sh"] 

与下面的.drone.yml

 build: image: test_buildenv commands: - cd api - apk add make - apk add g++ - MIX_ENV=test mix local.hex --force - MIX_ENV=test mix local.rebar --force - docker login --username USERNAME --password PASSWORD - mix docker.build # creates a release file after running a dockerfile.build image - mix docker.release # creates a minimalist image to run the release file that was just created - mix docker.publish # pushes newly created image to dokcerh volumes: - /var/run/docker.sock:/var/run/docker.sock