Docker run<;图像>;始终使用标准的“u init”linux.go:207:exec用户进程导致错误”;没有这样的文件或目录;在窗户上
我试图从Dockerfile中编写一个Docker run<;图像>;始终使用标准的“u init”linux.go:207:exec用户进程导致错误”;没有这样的文件或目录;在窗户上,docker,Docker,我试图从Dockerfile中编写一个docker组件,但失败了,错误为standard\u init\u linux。go:207:exec用户进程导致“没有这样的文件或目录” 我已经尝试了所有的方法,包括重新安装docker,但似乎不起作用 docker-compose.yml: version: "3" volumes: postgres_data: driver: local bundle_cache: driver: local services: po
docker组件
,但失败了,错误为standard\u init\u linux。go:207:exec用户进程导致“没有这样的文件或目录”
我已经尝试了所有的方法,包括重新安装docker,但似乎不起作用
docker-compose.yml:
version: "3"
volumes:
postgres_data:
driver: local
bundle_cache:
driver: local
services:
postgres:
image: postgres:11
volumes:
- postgres_data:/var/lib/postgresql/data
logging:
driver: "none"
ports:
- "${POSTGRES_PORT}:5432"
web-tracking:
build:
context: .
tty: true
stdin_open: true
env_file:
- ./.env
depends_on:
- postgres
links:
- postgres
ports:
- "${RAILS_PORT}:3000"
volumes:
- ./:/app:delegated
- bundle_cache:/bundle
Dockerfile:
FROM ruby:2.6.3
EXPOSE 3000
WORKDIR ./app
RUN \
apt-get update -qq && \
apt-get install -y --no-install-recommends \
nodejs \
postgresql-client
ENV BUNDLE_PATH=/bundle \
BUNDLE_BIN=/bundle/bin \
GEM_HOME=/bundle
ENV PATH="${BUNDLE_BIN}:${PATH}"
COPY docker-entry.sh .
ENTRYPOINT ["/app/docker-entry.sh"]
CMD ["rails", "server", "-b", "0.0.0.0"]
docker-entry.sh
#!/bin/sh
set -e
# if the server was not shut down properly the pid file will need to be removed
if [ -f tmp/pids/server.pid ]; then
rm tmp/pids/server.pid
fi
bundle install
bundle exec "$@"
根本原因是
docker entry.sh
,您在windows上设置了此文件。在windows上,换行符是\r\n
,当您最终在linux容器中运行它时,换行符是\n
因此,您应该输入类似于gitbash
的内容,然后执行dos2unix docker entry.sh
更改格式,重新生成并重新运行它,就可以了
另一种解决方案是在生成和更改Dockerfile
中的格式时安装dos2unix,如next(您可能还需要更改其权限):
我在Ubuntu 16.04上运行你的堆栈没有问题。如果您在Windows上运行,可能需要使用dos2unix运行docker-entry.sh脚本() 当我开始使用docker时,我第一次尝试使用docker compose。 所以,我意识到学习docker和docker一起创作对我来说非常困难, 因为你在混乱的命令和配置中迷失了方向。 要开始我为您推荐,请尝试仅使用Dockerfile并连接“postgres”和“web tracking”
具有称为“用户定义桥”(user-definedbridges)的docker网络的容器 Dockerfile将
WORKDIR
设置为/app
(=${PWD}/app
)<代码>docker条目。sh复制到那里。但是入口点使用/app
。我认为WORKDIR
也应该是/app
@DazWilkin,这是我为了让docker compose
工作而搞砸的东西。这实际上不在原始文件中。但我不能纠正它,否则堆栈溢出会说我发布了太多代码,所以“_(ツ)_/“这不好,行为取决于基本映像,但这里基本映像的工作目录是/
,因此//app
与/app
一样。”
FROM ruby:2.6.3
EXPOSE 3000
WORKDIR ./app
RUN \
apt-get update -qq && \
apt-get install -y --no-install-recommends \
nodejs \
postgresql-client \
dos2unix
ENV BUNDLE_PATH=/bundle \
BUNDLE_BIN=/bundle/bin \
GEM_HOME=/bundle
ENV PATH="${BUNDLE_BIN}:${PATH}"
COPY docker-entry.sh .
RUN dos2unix ./docker-entry.sh && chmod 777 ./docker-entry.sh
ENTRYPOINT ["/app/docker-entry.sh"]
CMD ["rails", "server", "-b", "0.0.0.0"]