有没有办法可以使用名称而不是IP地址访问我的docker容器?
我听说过管道工程,我已经看到了docker的一些dns和主机名类型选项,但我仍然无法将所有内容拼凑在一起.
感谢您的时间.
我不确定这是否有用,但这是我到目前为止所做的:
我已经将DNS别名条目添加到我的专用网络DNS服务器,它与docker-machine使用的机器名称相匹配.但是,当计算机启动并连接到网络时,它始终会选择不同的IP地址.
我只是迷失在哪里解决这个问题:
我可能正在寻找类似这个问题的东西:
如何让docker使用我的网络路由器轻松地将dhcp ip分配给容器而不是管道?
任何大方向都会很棒......再次感谢!
我正在寻找构建代表已存在的公司数据库的dockerfiles.同样,我想创建一个通过恢复psql转储开始的docker文件.
我有我psql_dump.sql的.目录.
FROM postgres
ADD . /init_data
run "createdb" "--template=template0" "my_database"
run "psql" "-d" "my_database" --command="create role my_admin superuser"
run "psql" "my_database" "<" "init_data/psql_dump.sql"
Run Code Online (Sandbox Code Playgroud)
我认为这样做会很好.我想避免使用.sh脚本的解决方案.像这个解决方案.
我使用template0,因为psql文档说您需要创建原始数据库中的相同用户,并且需要在还原之前使用template0创建数据库.
但是,它给了我一个错误:
createdb: could not connect to database template1: could not connect to server: No such file or directory
Is the server running locally and accepting
Run Code Online (Sandbox Code Playgroud)
我也在使用docker compose作为整个应用程序,如果在docker-compose中解决这个问题更好,我会很乐意使用基本的psql镜像并使用docker compose来做到这一点.
我有一个 docker-compose 文件和一个 Dockerfile。MySQL 已正确安装。我已经设置了MYSQL_ROOT_PASSWORD。但是当尝试访问 mysql db 时,出现错误 - 访问被拒绝。我已阅读本网站的其他主题,但无法获得太多帮助。:(
这是我的 docker-compose 文件:
version: '3'
volumes:
db_data: {}
services:
db:
build:
context: .
dockerfile: ./db/Dockerfile
args:
- database=iTel
- password=123
image: db_image
volumes:
- db_data:/var/lib/mysql
ports:
- "3306:3306"
Run Code Online (Sandbox Code Playgroud)
和 Dockerfile:
FROM mysql:5.7.15
ARG database
ARG password
RUN echo ${database}
RUN echo ${password}
MAINTAINER me
ENV MYSQL_DATABASE=${database} \
MYSQL_ROOT_PASSWORD=${password}
ADD ./db/database100.sql /docker-entrypoint-initdb.d
EXPOSE 3306
Run Code Online (Sandbox Code Playgroud)
以下是构建日志:
docker-compose up -d
Building db
Step 1/9 : FROM mysql:5.7.15
5.7.15: Pulling from library/mysql …Run Code Online (Sandbox Code Playgroud) 我正在尝试设置一个postgres容器,并希望设置postgres登录:
POSTGRES_USER: docker
POSTGRES_PASSWORD: docker
Run Code Online (Sandbox Code Playgroud)
所以我像这样创建了docker-compose.yml
web:
build: .
ports:
- "62576:62576"
links:
- redis
- db
db:
image: postgres
environment:
POSTGRES_PASSWORD: docker
POSTGRES_USER: docker
redis:
image: redis
Run Code Online (Sandbox Code Playgroud)
我还尝试了环境变量的其他语法,将db部分声明为:
db:
image: postgres
environment:
- POSTGRES_PASSWORD=docker
- POSTGRES_USER=docker
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用各种连接字符串连接到postgres数据库时,无论出于何种原因,这些选项似乎都不起作用:
postgres://postgres:postgres@db:5432/users
postgres://postgres:docker@db:5432/users
postgres://docker:docker@db:5432/users
Run Code Online (Sandbox Code Playgroud)
他们都给我auth失败,而不是抱怨没有用户数据库.
我的搬运工,compose.yml看起来像下面,我试图按照从泊坞窗注册表文件撰写的文件在这里.当我运行docker-compose时,我得到以下错误.
错误:在文件'./docker-compose.yml'中,服务'volumes'必须是映射而不是数组.
registry:
restart: always
image: sudarshan/registry
ports:
- 5000:5000
environment:
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
REGISTRY_AUTH: silly
REGISTRY_AUTH_SILLY_SERVICE: SILLY_SERVICE
REGISTRY_AUTH_SILLY_REALM: SILLY_REALM
volumes:
- /usr/certs:/certs
Run Code Online (Sandbox Code Playgroud)
我的码头版本是
Docker版本1.12.1,build 23cf638
docker-compose版本是
docker-compose版本1.7.1,build 0a9ab35
在Ubuntu 16.04上运行
编辑:
也试过了
registry:
restart: always
image: sudarshan/registry
ports:
- 5000:5000
environment:
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
REGISTRY_AUTH: silly
REGISTRY_AUTH_SILLY_SERVICE: SILLY_SERVICE
REGISTRY_AUTH_SILLY_REALM: SILLY_REALM
volumes:
- /usr/certs:/certs
Run Code Online (Sandbox Code Playgroud) 我无法找到有关这些的更多信息.
我们应该使用docker stop我们开始使用的容器吗?docker start
或者相同docker-compose up?
停止和停止有什么区别?
我的dockerfile中有以下行
COPY /root/url.net/volumes/persistent/url/root /usr/share/nginx/html
Run Code Online (Sandbox Code Playgroud)
当我尝试使用docker-compose构建图像时,我得到了
服务'前端'无法构建:lstat /root/url.net/volumes/persistent/url/root:没有这样的文件或目录
我可以从任何地方cd到/root/url.net/volumes/persistent/url/root我的机器没问题.
如何在dockerfile中指定文件夹的绝对路径?
包装工和码头工人有何不同?提供/维护哪一个更容易/最快?为什么?拥有docker文件的优缺点是什么?
docker-compose run有一个标志--rm,可以在运行后自动删除容器.我想知道是否有一个与docker-compose.yml等效的配置用于特定服务,因为我在yml中获得的服务之一是一次性构建过程,它应该只输出编译文件并自行消失.
我可以这样执行docker run命令......
docker run --rm --user $(id -u):$(id -g) -e MYDATA=/some/path/to/data -e USER=$USER -p 8883-8887:8883-8887 ...
Run Code Online (Sandbox Code Playgroud)
但是,在 Docker Compose 中,当我写出以下内容时......
version: '3.7'
services:
container_name: some-server
image: some:img
user: $(id -u):$(id -g)
...
Run Code Online (Sandbox Code Playgroud)
... 这是行不通的。
我知道我要求docker-compose up执行子 shell 命令替换,但它不能。
有没有办法做到这一点?
docker-compose ×10
docker ×9
dockerfile ×4
postgresql ×2
bash ×1
dns ×1
hostname ×1
mysql ×1
packer ×1
shell ×1