我真的需要一些帮助。我想做的是使用标准 golang:1.5 Docker 映像构建 Go 二进制文件,然后将该二进制文件从容器中复制到基于 busybox 的新的最小 Docker 容器中。使用 Docker 安装的卷将二进制文件从容器中拉出。到目前为止,我遇到了两个问题。
运行命令时,主机上生成的二进制文件(随后复制到第二个容器中)似乎仍然是 Mach-O 64 位可执行文件file。Docker 容器是否以某种方式从主机获取 GOOS 和 GOARCH?
当手动运行容器并bash构建 Go 二进制文件时,它现在说它是 ELF 可执行文件,但它是动态链接的。我认为默认情况下构建静态链接的二进制文件?我的这个假设可能是错误的。
预先感谢您可以提供的任何帮助。
编辑:这是我正在使用的命令。希望这能让它更清楚一些
## golang:1.5 base image with WORKDIR set to $GOPATH/src/myproject the source
## for the project was added in when creating the 'mybuild_img' docker image
## GOPATH is set automatically in the golang image.
docker run -i -v `pwd`/jenkins/out:$GOPATH/src/myproject/jenkins/out mybuild_img:latest bash -c 'go build && cp myproject ./jenkins/out'
Run Code Online (Sandbox Code Playgroud)
容器运行完毕后,我在 ./jenkins/out/ …
由于我经常使用 docker 和 docker-machine,因此我必须同时使用多个 docker 版本。我们都知道这有多难:
$ docker ps
Error response from daemon: client is newer than server (client API version: 1.23, server API version: 1.22)
Run Code Online (Sandbox Code Playgroud)
所以,我的问题:(如何)是否可以在我的 Ubuntu 16.04 上运行多个版本的 docker 客户端?理想情况下,一旦我输入带有docker-machine.
旁注:我知道如何更新客户端或服务器。但我仍然必须使用不同的版本。
我正在尝试使用 spring devtools、 docker 和 IntelliJ设置远程 spring-boot 环境。一切从这篇文章开始。不幸的是,它随机失败,但有一个例外。下面是配置:
文件
FROM java:8
EXPOSE 8888
WORKDIR /app
ADD build.gradle /app/build.gradle
ADD gradlew /app/gradlew
ADD gradle /app/gradle
ADD src /app/src
RUN ["chmod", "+x", "/app/gradlew"]
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml
backend:
build: .
env_file: environment
ports:
- "8888:8888"
volumes:
- ./.gradle-docker:/root/.gradle
command: "/app/gradlew clean bootRun"
links:
- db
db:
image: postgres:9.5.3
env_file: environment
ports:
- "5454:5432"
Run Code Online (Sandbox Code Playgroud)
整个应用程序从命令行启动:docker-compose build和docker-compose up命令。
在 IntelliJ 中,我准备了以下 java 应用程序配置:

docker:8888spring 应用程序使用的 docker-machine 和端口的 IP在哪里。配置运行后输出如下:
/\\ …Run Code Online (Sandbox Code Playgroud) 当我这样做时,docker info它给了我以下结果:
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 3
CPUs: 2
Total Memory: 7.632 GiB
Run Code Online (Sandbox Code Playgroud)
但我希望 cpu 为 1 而不是 2。如何限制 docker 本身的 CPU?
嗨,我想在 Windows 上创建一个 Docker 机器并拥有 Docker 工具箱并且必须执行此代码
./docker-machine create -d virtualbox --virtualbox-boot2docker-url https://github.com/boot2docker/boot2docker/releases/download/v1.11.2/boot2docker.iso --virtualbox-memory 3240 --virtualbox-cpu-count 2 --virtualbox-disk-size 30480 --virtualbox-hostonly-cidr "192.168.56.1/24" local
Run Code Online (Sandbox Code Playgroud)
所以我想知道什么是 --virtualbox-hostonly-cidr 并且它做了
官方文档说:
--virtualbox-hostonly-cidr "192.168.99.1/24" Specify the Host Only CIDR [$VIRTUALBOX_HOSTONLY_CIDR]
Run Code Online (Sandbox Code Playgroud)
我不明白。网络文化低的开发者能否详细解释一下。
所以我想使用自定义 env 文件取决于通过命令行传递的自定义环境变量。
假设我使用 docker-compose run 命令开始我的撰写:
docker-compose run -e ENVIROMENT=local spring-app
Run Code Online (Sandbox Code Playgroud)
然后我想在基于 ENVIROMENT 变量的 docker-compose.yml 文件中使用我的自定义 .env
version: '2.1'
services:
spring-app:
build: .
depends_on:
docker-mariadb:
condition: service_healthy
links:
- docker-mariadb
ports:
- 8080:8080
environment:
- SPRING_PROFILES_ACTIVE
- DATABASE_HOST
- DATABASE_USER
- DATABASE_PASSWORD
- DATABASE_NAME
- DATABASE_PORT
env_file:
- ${ENVIROMENT}.env
docker-mariadb:
image: mariadb:latest
restart: always
environment:
- MYSQL_ROOT_PASSWORD=${DATABASE_PASSWORD}
- MYSQL_DATABASE=${DATABASE_NAME}
- MYSQL_PASSWORD=${DATABASE_PASSWORD}
healthcheck:
test: "/usr/bin/mysql --user=${DATABASE_USER} --password=${DATABASE_PASSWORD} --execute \"SHOW DATABASES;\""
interval: 30s
timeout: 10s
retries: 5
env_file:
- ${ENVIROMENT}.env
Run Code Online (Sandbox Code Playgroud)
我的码头档案: …
在由 docker-machine 创建的 EC2 linux 服务器上,当我通过docker-compose up启动 docker postgres:10.6时,出现以下循环错误:
FATAL: password authentication failed for user "postgres"
DETAIL: Password does not match for user "postgres".
Connection matched pg_hba.conf line 95: "host all all all md5"
Run Code Online (Sandbox Code Playgroud)
如果我手动启动容器,我就不会出现这些错误 => docker run -e POSTGRES_PASSWORD=myPassword postgres:10.6
我的本地 docker 中没有这些错误。
我的 docker-compose :
FATAL: password authentication failed for user "postgres"
DETAIL: Password does not match for user "postgres".
Connection matched pg_hba.conf line 95: "host all all all md5"
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这一问题?
我在远程机器上启动了一个 docker-compose 堆栈,通过 gitlab CI/CD(运行程序连接到远程机器上的 docker 引擎并使用 执行部署docker-compose up -d)。
当我从我的笔记本电脑连接到那台机器时,使用eval docker-machine env REMOTE_ADDRESS,我可以看到 docker 进程正在运行(使用docker ps),而服务堆栈似乎是空的(docker-compose ps)。
我无法docker-compose down用来停止堆栈,并且尝试docker-compose up -d给了我错误
ERROR: for feamp_postgres Cannot create container for service postgres: Conflict. The container name "/feamp_postgres" is already in use by container "40586885...". You have to remove (or rename) that container to be able to reuse that name.
Run Code Online (Sandbox Code Playgroud)
反过来也是如此,我可以从我的本地笔记本电脑(使用 docker-machine)启动堆栈,但是当尝试执行时 CI/CD 管道失败,docker-compose up -d并出现相同的错误。
这发生在笔记本电脑 (OSX) …
我正在尝试将自动 TLS/SSL 终止添加到通过docker-machine部署的docker-compose 中的 Nginx (DigitalOcean)。
我找到了一些不错的资源 [ humankode/how-to-set-up... , medium/nginx-and-lets-encrypt... ] 关于如何通过 docker-compose 做到这一点,但他们都从在服务器上的观点。我真的很想避免这种情况。我很想在本地,在我的笔记本电脑上做,把它们捆绑在一起,然后寄出去。或者,甚至无需执行任何 ssh 即可远程执行此操作。
几次尝试都失败了,但感觉他们已经接近了。主要障碍似乎是文件/卷。按照medium/nginx-and-lets-encrytp...指南,我在保存 OpenSSL privkey.pem 时遇到问题。另一个教程(humankode),据我所知,在服务器上完成所有工作,这就是卷所在的地方。
我最近的尝试是通过DigitalOcean 教程在机器上设置证书,并尝试将这些包含在我的 docker-compose 构建中。没运气。
有很多修改,但我的设置类似于:
version: '3.7'
services:
nginx:
image: nginx:1.15.9-alpine
container_name: nginx
build:
context: ./nginx
dockerfile: Dockerfile
restart: always
volumes:
- /etc/letsencrypt
- /var/www/certbot
ports:
- "80:80"
- "443:443"
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g …Run Code Online (Sandbox Code Playgroud) 有人可以解释包含 docker 运行时的两者之间的区别吗?
docker-machine ×10
docker ×9
boot2docker ×2
macos ×2
amazon-ec2 ×1
containers ×1
cpu-usage ×1
dockerfile ×1
go ×1
lets-encrypt ×1
nginx ×1
postgresql ×1
spring-boot ×1
ssl ×1
ubuntu ×1
virtualbox ×1