标签: dockerfile

SQL Server Docker Compose SQLCMD 不执行

我目前正在尝试在 docker compose 中设置 SQL Server,并且想使用指令在构建时创建数据库RUN。这不起作用,但是当我使用 sh 在正在运行的容器上执行相同的命令时,它起作用

我的撰写文件如下所示:

version: "3.7"

services:
  mssql:
    build: ./mssql
    environment: 
      SA_PASSWORD: "Password12345!"
      ACCEPT_EULA: "Y"
    container_name: mssqlDB
    ports:
      - "1433:1433"
    restart: always
Run Code Online (Sandbox Code Playgroud)

这是我的 Dockerfile:

FROM mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
COPY ./prod.sql /
RUN ./opt/mssql-bin/sqlcmd -S localhost -U SA -P "Password12345!" -Q "Create Database HelloWorld"
CMD ["/opt/mssql/bin/sqlservr"]
Run Code Online (Sandbox Code Playgroud)

sql-server docker dockerfile docker-compose

0
推荐指数
1
解决办法
3459
查看次数

未在 Docker 容器/映像内创建 venv 目录

我对 Docker 比较陌生,作为一个实验,我尝试使用以下 Dockerfile 创建一个通用的 Django 开发容器:

FROM python

ENV PYTHONUNBUFFERED 1
RUN apt-get update && apt-get dist-upgrade -y
RUN mkdir /code
WORKDIR /code
RUN python3 -m venv djangoProject
RUN /bin/bash -c "source /code/djangoProject/bin/activate && python3 -m pip install --upgrade pip && pip install django"
EXPOSE 8000
Run Code Online (Sandbox Code Playgroud)

图像似乎构建得很好,但是当我去运行容器时:

docker container run -v /home/me/dev/djangoRESTreact/code:/code -it --rm djangodev /bin/bash
Run Code Online (Sandbox Code Playgroud)

我的本地挂载 /home/me/dev/djangoRESTreact/code 未填充我期望从此 Dockerfile 和挂载中获得的 djangoProject venv 目录。docker 容器在 /code 处还有一个空目录。python3 -m venv djangoProject如果我直接在容器内运行,则会创建 venv 目录,并且我可以在主机上和容器内看到它。

知道为什么我的 venv 没有在映像和后续容器中创建吗?

我正在拔头发。

提前致谢!

python docker dockerfile

0
推荐指数
1
解决办法
1405
查看次数

如何从 gitlab 存储库中存储的文件中提取内容

使用 gitlab-python 包,我想从所有 Dockerfile 中提取行。使用下面的代码,我可以获取项目名称和我想要的存储库的 url,但如何确保存在 Dockerfile 并读取 Dockerfile 的内容。

import gitlab
import json
from pprint import pprint
import requests
import urllib.request


# private token authentication
gl = gitlab.Gitlab('<path_to_gitlab_repo>', private_token=<token_here>)

gl.auth()

# list all projects
projects = gl.projects.list()
for project in projects:
    # print(project) # prints all the meta data for the project
    print("Project: ", project.name)
    print("Gitlab URL: ", project.http_url_to_repo)
    # print("Branches: ", project.repo_branches)
    pprint(project.repository_tree(all=True))
    f = urllib.request.urlopen(project.http_url_to_repo)
    myfile = f.read()
    print(myfile)
    print("\n\n")
Run Code Online (Sandbox Code Playgroud)

我现在得到的输出是:

Gitlab URL:  <path_to_gitlab_repo>
[{'id': '0c4a64925f5c129d33557',
  'mode': …
Run Code Online (Sandbox Code Playgroud)

python gitlab dockerfile gitlab-api

0
推荐指数
1
解决办法
9519
查看次数

尽管使用 docker build 成功添加了 shell 脚本,但 docker run 无法运行 shell 脚本(未找到文件)

我正在使用私有 docker hub 存储库https://hub.docker.com/u/privaterepoexample/,之后我使用以下命令构建了我的 docker 映像:

\n\n
docker login\ndocker build -t privaterepoexample/sre:local .\ndocker tag 85cf9475bc1c privaterepoexample/sre\ndocker push privaterepoexample/sre\n
Run Code Online (Sandbox Code Playgroud)\n\n

docker build 的输出显示已login.sh添加到容器中:

\n\n
Executing busybox-1.29.3-r10.trigger\nOK: 85 MiB in 57 packages\nRemoving intermediate container 12fd67450dfc\n ---> e9ca0b9e4ac4\nStep 5/7 : WORKDIR /opt\n---> Running in ce881ede94aa\nRemoving intermediate container ce881ede94aa\n---> 2335b4f522ac\nStep 6/7 : ADD login.sh /opt\n---> 2aabf1712153\nStep 7/7 : CMD ["chmod 755 login.sh  && ./login.sh"]\n ---> Running in 8ec824d4e561\nRemoving intermediate container 8ec824d4e561\n ---> c97a4ad61578\nSuccessfully built c97a4ad61578\nSuccessfully tagged privaterepoexample/sre:local\n
Run Code Online (Sandbox Code Playgroud)\n\n

下面的 Dockerfile …

shell docker dockerfile

0
推荐指数
1
解决办法
1万
查看次数

错误 /dev/tty: 在 docker 内安装 sqlcmd 时没有这样的设备或地址

我想在我的 docker 映像中安装 sql cmd。我的 dockerfile 有这些命令来安装 sqlcmd (centos 7 基本映像)

RUN curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo
RUN yum remove mssql-tools unixODBC-utf16-devel
RUN yum install -y unixODBC-devel mssql-tools
Run Code Online (Sandbox Code Playgroud)

以下是 docker 构建日志

Transaction test succeeded
Running transaction
  Updating   : libcom_err-1.42.9-17.el7.x86_64                             1/14
  Installing : unixODBC-2.3.7-1.rh.x86_64                                  2/14
  Updating   : libss-1.42.9-17.el7.x86_64                                  3/14
  Installing : e2fsprogs-libs-1.42.9-17.el7.x86_64                         4/14
  Installing : e2fsprogs-1.42.9-17.el7.x86_64                              5/14
  Updating   : 1:openssl-libs-1.0.2k-19.el7.x86_64                         6/14
  Installing : 1:make-3.82-24.el7.x86_64                                   7/14
  Installing : 1:openssl-1.0.2k-19.el7.x86_64                              8/14
/var/tmp/rpm-tmp.8S1dKq: line 17: /dev/tty: No such device or address
error: %pre(msodbcsql17-17.5.2.1-1.x86_64) scriptlet failed, …
Run Code Online (Sandbox Code Playgroud)

centos sqlcmd tty docker dockerfile

0
推荐指数
1
解决办法
2790
查看次数

在 Docker 中覆盖 ENTRYPOINT 时,停止 Apache2 的速度要慢得多

我正在对 PHP 应用程序进行容器化,并希望根据环境变量修改 Apache 配置。这是在覆盖默认值的脚本中完成的ENTRYPOINT

FROM php:7.2-apache
# ...
COPY prepare-docker-configs.sh .
RUN chmod +x prepare-docker-configs.sh
ENTRYPOINT ./prepare-docker-configs.sh
Run Code Online (Sandbox Code Playgroud)

进行这些修改后,Apache 不会启动。apache2-foreground似乎缺少命令,所以我在末尾运行它prepare-docker-configs.sh

#!/bin/bash
# ... Some config substitution
apache2-foreground
Run Code Online (Sandbox Code Playgroud)

现在 Apache 已经启动,一切都按预期进行。但我注意到停止容器比以前慢得多。我跑time docker-compose down了两个星座:

没有我的自定义覆盖ENTRYPOINT

real    0m2,080s
user    0m0,449s
sys 0m0,064
Run Code Online (Sandbox Code Playgroud)

我的自定义脚本为ENTRYPOINT

real    0m12,247s
user    0m0,491s
sys 0m0,067s
Run Code Online (Sandbox Code Playgroud)

所以需要大约10秒的时间。特别是在需要进行大量测试的开发过程中,这总共会浪费大量时间。

为什么我的自定义ENTRYPOINT停止速度如此之慢?如何解决?

我尝试STOPSIGNAL SIGWINCH从原始 Dockerfile 添加并运行docker-php-entrypoint,两者都没有帮助。

docker-compose.yml文件没什么特别的。由于内部冲突,它只是定义了服务并覆盖默认网络:

version: '2' 
services: 
  app: 
    build:
      context: .
      args: …
Run Code Online (Sandbox Code Playgroud)

performance apache2 docker dockerfile docker-compose

0
推荐指数
1
解决办法
1484
查看次数

在一个 Dockerfile 中 Dockerize next.js 和 nginx

我已经使用两个 docker 映像成功地对我的应用程序进行了 dockerize,一个用于 nginx,第二个用于应用程序,并且它运行良好,因为我使用 docker compose。现在我只想拥有一个包含应用程序和 nginx 的 Dockerfile,然后在我的本地计算机上运行它。我怎样才能做到这一点?

这是我的nginx/default.conf

# Cache zone
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=STATIC:10m inactive=7d use_temp_path=off;

upstream nextjs {
  server nextjs:3000;
}

server {
  listen 80 default_server;

  server_name _;

  server_tokens off;

  gzip on;
  gzip_proxied any;
  gzip_comp_level 4;
  gzip_types text/css application/javascript image/svg+xml;

  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection 'upgrade';
  proxy_set_header Host $host;
  proxy_cache_bypass $http_upgrade;

  # BUILT ASSETS (E.G. JS BUNDLES)
  # Browser cache - max cache headers from Next.js as build id in url
  # …
Run Code Online (Sandbox Code Playgroud)

nginx docker dockerfile next.js

0
推荐指数
1
解决办法
1万
查看次数

将 npm install 的输出复制到 docker 容器

我对 Node.js 进行了 docker 化,一切正常

Dockerfile:

FROM node:alpine
WORKDIR '/app'
COPY package.json .
RUN npm install
COPY . .
EXPOSE 9000

CMD ["npm", "run", "dev"]
Run Code Online (Sandbox Code Playgroud)

我正在尝试在 Dockerfile 之外运行npm install并将内容复制npm install到 docker 容器

在我运行的 docker 主机上

npm install --prefix /opt/npm/ -g
Run Code Online (Sandbox Code Playgroud)

文件夹/opt/npm/lib/node_modules/ui已创建。在该文件夹中,有一堆 json 文件和文件夹 node_modules。Dockerfile 位于该文件夹中。现在,在 Dockerfile 中,我跳过了 npm install,只是将 /opt/npm/lib/node_modules/ui 的内容复制到 docker 容器。

修改后的 Dockerfile

FROM node:alpine
WORKDIR '/app'
COPY . .
EXPOSE 9000
Run Code Online (Sandbox Code Playgroud)

已成功从 Dockerfile 构建映像,但是当尝试从该映像运行容器时

docker run -p 9000:4200 pm

> ui@0.0.0 …
Run Code Online (Sandbox Code Playgroud)

node.js dockerfile npm-install

0
推荐指数
1
解决办法
5265
查看次数

尝试使用 crontab 和简单的 python 脚本运行一个简单的 docker 容器

所以我对创建容器还很陌生,我有一个简单的 Dockerfile,我想在其中每分钟运行一个简单的 python 脚本:

FROM python:3.8-buster
RUN apt-get update && apt-get install -y cron
COPY my_python /bin/my_python
COPY root /var/spool/cron/crontabs/root
RUN chmod +x /bin/my_python
CMD cron -l 2 -f
Run Code Online (Sandbox Code Playgroud)

其中我的_python:

print("hi world!!")
Run Code Online (Sandbox Code Playgroud)

和根:

* * * * * python3 /bin/my_python
Run Code Online (Sandbox Code Playgroud)

然后我只创建图像和容器:

 docker image build -t python-test
 docker container run -it --name python-test python-test
Run Code Online (Sandbox Code Playgroud)

我应该每分钟都会看到一个带有 hi world 的打印,但是当运行容器时(在图像构建之后)似乎没有出现日志。

我究竟做错了什么?

cron containers docker dockerfile

0
推荐指数
1
解决办法
1614
查看次数

如何将 .env 文件传递​​到 Go 项目中的 docker 镜像?

我的 Go 项目层次结构是这样的:

在此输入图像描述

主要功能:

func main() {
    path, _ := os.Getwd()
    err := godotenv.Load(filepath.Join(path, ".env"))
    if err != nil {
        log.Fatal("Error loading .env file")
    }
    server.Init()
}
Run Code Online (Sandbox Code Playgroud)

这是我的docker文件内容:

FROM golang:alpine AS build-env
LABEL MAINTAINER "Amit Pal <amit.pal@fynchmobility.com>"
ENV GOPATH /go
WORKDIR /go/src
COPY . /go/src/gothamcity
RUN cd /go/src/gothamcity && go build .

FROM alpine
RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk*
WORKDIR /app
COPY --from=build-env /go/src/gothamcity/gothamcity /app

EXPOSE 8080

ENTRYPOINT [ "./gothamcity" ]
Run Code Online (Sandbox Code Playgroud)

我运行以下命令来构建并运行 …

environment-variables go docker kubernetes dockerfile

0
推荐指数
1
解决办法
8132
查看次数