我有以下Dockerfile:
FROM ubuntu
ENV NPM_CONFIG_LOGLEVEL warn
ENV admin_user="PeerAdmin" network_name=$1 version=$2 hversion=hlfv1 fabrik_path=/fabric-tools project_dir=$(pwd)
ENV card_store_dir=$project_dir/.card-store stage_dir=$project_dir/.stage env_dir=$project_dir/env is_ok=1 FABRIC_VERSION=hlfv1
WORKDIR /app
COPY . /app
USER root
# RUN chown -R ubuntu:ubuntu .
WORKDIR /app
RUN apt-get update && \
mkdir "$fabrik_path" && \
cd "$fabrik_path" && \
export FABRIC_VERSION=hlfv1 && \
apt-get -y install apt-transport-https ca-certificates curl software-properties-common && \
apt-get -y install curl && \
apt-get -y install unzip && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
apt-get -y install docker.io && \
curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.zip && \
unzip fabric-dev-servers.zip && \
service docker start && \
./downloadFabric.sh && \
./startFabric.sh
尝试执行它,我收到一个错误:
**Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?**
像
service docker start
或systemctl这样的命令不起作用。 最佳答案
您不能(*)在Docker容器或镜像中运行Docker。您不能(*)在Dockerfile中启动后台服务。就像您说的那样,诸如systemctl
和service
的命令在任何地方都无法在Docker内部运行。而且无论如何,您都无法从Dockerfile中的任何位置使用任何主机系统资源,包括主机的Docker套接字。
您需要重新设计此Dockerfile,使其仅安装软件,而不会尝试启动它。理想情况下,容器只能启动一台服务器,并将其作为CMD在前台运行;否则,如果需要,您可能依赖supervisord之类的东西来拥有多个服务器。如果您的应用程序严重依赖于能够在Docker中启动功能,则可能会发现在虚拟机中安装起来要容易得多。
(*)从技术上讲,有很多方法可以完成所有这些操作,但是它们都很棘手,复杂并且会产生影响(可能会给您的容器提供对主机的不受限制的根访问权限,并且您的容器启动会积极地重新配置一些低级主机细节)。